- Express: framework pra lidar com requisições da aplicação --save: vai salvar como uma dependência do meu projeto - dependência de producão --save-dev: não ir para deploy em ambiente de prod
- node
- nodemon: restartar o node quando houver atualizações
- express-async-erros: tratamento de excessões
- sqlite3: drive de conexão, estabelecer comunicação com a base de dados
- sqilite: responsável por conecatar
- node path: resolve o path dos arquivos (não precisa instalar, vem junto com o node)
- bcryptjs: encriptografa senhas para inserção no banco
- knex.js: ORM - query builder
flowchart TD
A[A] --> |middle| B[B];
npm init -y
- -y: estabelece algumas configs pre configuradas
- sem o -y: será feito algumas perguntas: nome do projeto..
npm install
node src/file.js
npm start
node run script
GET, POST, PUT, DELETE .. PATCH: atualizar, mas dessa vez uma parte especifica de alguma coisa
Valores obrigatórios localhost/user/5 => host/recurso/route param
app.get("/message/:id", (req, res) => {
res.send(`Olá n: ${req.params.id}`)
})
Valores não obrigatórios localhost/user?nome=Fernanda&age=25
const {page, limit} = req.query
Um controller tem NO MÁXIMO 5 métodos, se passar disso considere criar outro controller
- Index: GET para listar vários registros
- Show: GET para exibir um regitsro especifico
- Create: POST para criar um registro
- Update: PUT para atualizar um registro
- Delete: DELETE para remover um registro
1xx: Informativo 102: Processando 2xx: Sucesso 3xx: Redirecionamento (Não está mais disponível naquele enereço) 301: Movido permanentemente 302: Movido 4xx: Erro do Cliente 400: bad request 5xx: Erro do Servidor
Comumente denotada por uma variável chamada next São funções que têm acesso ao objeto de solicitação(requisição), o objeto de resposta(response), e a próxima função de middleware no ciclo solicitação-resposta do aplicativo.
- podem executar código
- fazer mudança nos objs de solicitação e resp
- encerrar o ciclo de solicitação-resp
- chamar o próximo middleware na pilha
function myMiddleware(req, resp, next) {
resp.send("Passou pelo Middleware");
next();
}
Boas práticas em BD:
- nomes de tabelas em minusculo e no plural
- tipos das colunas em caixa alta
- query em caixa alta
- nome de coluna separada por _
?? -> nulish operator
name = user.name ?? name;
npx knex init
Forma de versionar o banco de dados
- método UP: responsável por criar ou alterar algo no banco
- método DOWN: responsável pelo rollback. Ou seja, desfazer as alterações realizadas pela migration
npx knex migrate:make createNotes
npx knex migrate:latest
Estrategia usada dentro da migration para deletar o registro caso a primarykey for deletada. Por exemplo tenho uma nota do usuário Pedro, quando Pedro for deletado eu deleto junto a nota dele. Garantindo CONSISTÊNCIA
Ele basicamente permite que expressões expandam o conteúdo de arrays em locais onde múltiplos elementos são esperados
nomes =["José, Maria, Pedro"]
func({
...nomes,
cidade
})