Configuração do projeto varia de acordo com cada pessoa, mas todos os passos foram construidos a partir das documentações e boas práticas de código.
npm init
//OU
npm init -y
Documentação "npm init": LINK
#Instalar Nodemon (devDependencies)
npm install nodemon -D
#Adicionar script para servidor atualizar ao modificar arquivos
# package.json
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"test": "jest --watch"
},
Documentação "nodemon": LINK
OBS: Nomes dos arquivos não interferem no funcionamento
//server.js
const express = require("express");
const server = express();
server.use(express.json());
module.exports = server;
//index.js
const server = require("./server");
const PORT = process.env.PORT || 8000;
server.listen(PORT,() => {
console.log(`Servidor rodando na porta ${PORT}`);
});
//Opcional - Facilita caso tenha outras aplicações rodando (sinal de "=" deve estar sem espaços)
PORT=3000
Documentação "express": LINK
//Iniciar Aplicação
npm run dev
//Verificar se existe algum erro no Terminal
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node index.js`
Servidor rodando na porta 3000
//Abrir projeto no navegador em "http://localhost:PORTA_ESCOLHIDA"
Deve aparecer uma mensagem escrita "Cannot GET /"
Estrutura de uma URL: LINK
//Exemplo de estrutura
router.METODO("/NOME_RECURSO", (request,reponse) => {
response.status(200).send("Hello World!!");
})
//resquest e response - poderiam ser "queijo" e "uva", mas o ideal é usar nomes que fazem sentido
// routes/user
const express = require("express");
const router = express.Router();
router.get("/users", (req,res) => {
res.send("Método GET - Funcionou")
})
router.post("/user", (req,res) => {
res.send("Método POST - Funcionou")
})
router.put("/user/:id", (req,res) => {
res.send("Método PUT - Funcionou")
})
router.delete("/user/:id", (req,res) => {
res.send("Método DELETE - Funcionou")
})
module.exports = router;
Sobre Métodos HTTP: LINK
Rotas com Express: LINK
// server.js - Importar arquivo com rotas dos usuários
...
const usersRouter = require('./routes/users');
server.use(usersRouter);
- Inicie o POSTMAN, INSOMMINIA, THUNDER CLIENT OU OUTRO
Insomnia: LINK
Postman: LINK
Thunder Client: LINK
- Crie uma pasta/Folder como nome "users" para facilitar os testes
- Adicione as requisições com a URL da aplicação
- Provavelmente será algo como "http://localhost:PORT/users"
- Crie um requisição para método GET
- EX: "http://localhost:PORT/users"
- Crie um requisição para método POST
- EX: "http://localhost:PORT/user"
- Crie um requisição para método PUT
- EX: "http://localhost:PORT/user/1"
- Crie um requisição para método DELETE
- EX: "http://localhost:PORT/user/2"
- Teste cada requisição
- Se alguma requeisão retornar 404, provavelmente algo na rota esta errado
- Observe como foi definido no arquivo de configuração das rotas
XAMPP: LINK
Dbeaver: LINK
Mysql: LINK
// Baixar o prisma no projeto
npm install prisma @prisma/client
Documentação Prisma: LINK
// Inciar o prisma
npx prisma init --datasource-provider mysql
// Alterar arquivo .env
modifcar url de acesso ao banco de dados
Como montar a url : LINK
// prisma/schema.prisma
model user {
id Int @id @default(autoincrement())
name String
email String @unique
password String
}
- Criar arquivo em "db/prisma.js"
// db/prisma.js
const Prisma = require('@prisma/client');
module.exports = new Prisma.PrismaClient();
Operações CRUD Prisma: LINK
// service/user.js
const prisma = require("../db/prisma"); // instancia do prisma
const getAllUsers = () => { // bucar todos os usuários
return prisma.user.findMany();
}
const createUser = ({ name, email, password }) => { // criar usuario
return prisma.user.create({
data: {
name,
email,
password
}
});
}
const updateUser = (id, { name, email,password }) => { // atualizar usuario
return prisma.user.update({
where: { id },
data: {
name,
email,
password
}
});
};
const deleteUser = (id) => { // remover usuario
return prisma.user.delete({
where: { id }
})
}
module.exports = { // tornar acessivel em outros arquivos
getAllUsers,
createUser,
updateUser,
deleteUser,
}
// Modificar o arquivo
// routes/user.js
const { getAllUsers, createUser, updateUser, deleteUser } = require('../service/userService');
router.get("/users", async(req,res) => {
try {
const users = await getAllUsers();
res.json({ users });
} catch (error) {
res.send(error);
}
});
router.post("/user", async(req,res) => {
try {
const newUser = await createUser(req.body);
res.json(newUser);
} catch (error) {
res.json(error);
}
});
router.put("/user/:id", async(req,res) => {
const userId = Number(req.params.id);
try {
const updatedUser = await updateUser(userId, req.body);
res.json(updatedUser);
} catch (error) {
res.send(error);
}
});
router.delete("/user/:id", async(req,res) => {
const userId = Number(req.params.id);
try {
const deletedUser = await deleteUser(userId);
res.json(deletedUser);
} catch (error) {
res.send(error);
}
});
Arquitetura MVC: LINK
Insomnia: LINK
Postman: LINK
Thunder Client: LINK
O que é JSON?: LINK
GET ttp://localhost:PORT/users
POST http://localhost:PORT/user
- Body do tipo Json
{
"name": "Nome teste",
"email": "teste@email.com",
"passoword": "54321"
}
PUT http://localhost:PORT/user/1
- Body do tipo Json
{
"name": "Nome teste atualizado",
"email": "teste@email.com",
"passoword": "54321"
}
DELETE http://localhost:PORT/user/1
// Execute: GET -> POST -> GET -> PUT -> GET -> DELETE -> GET