DEV Community

Jessé
Jessé

Posted on

Nodejs: Express, Nodemon, Rotas e HTTP Requests

Como criar um servidor com Express
Arquivo dedicado às rotas
Métodos HTTP
Parâmetros de Requisição
Middleware

Como criar um servidor com Express:

const express = require("express");
const cors = require("cors");
const app = express();
app.use(cors());
//Converte para json
app.use(express.json());
//Ouvir a porta
app.listen(3333);
view raw index.js hosted with ❤ by GitHub

Arquivo dedicado às rotas:

const express = require('express');
const { uuid, isUuid } = require('uuidv4');
const projects = [];
const app = express();
app.use(express.json());
app.get('/projects', (request, response) => {
console.log(3);
const { title, owner } = request.query;
const results = title ? projects.filter(project => project.title.includes(title)) : projects;
return response.json(results);
});
app.post('/projects', (request, response) => {
const { title, owner } = request.body;
const project = { id: uuid(), title, owner };
projects.push(project);
return response.json(project);
});
app.put('/projects/:id', (request, response) => {
const { id } = request.params;
let projectIndex = projects.findIndex( project => project.id === id );
if ( projectIndex < 0 ) return response.status(400).json({ error: 'Project not found.' });
const project = {
id,
title,
owner
};
projects[projectIndex] = project;
return response.json(project);
});
app.delete('/projects/:id', (request, response) => {
const { id } = request.params;
let projectIndex = projects.findIndex( project => project.id === id );
if ( projectIndex < 0 ) return response.status(400).json({ error: 'Can not delete.' });
projects.splice(projectIndex, 1);
return response.send();
});
app.listen(3333, () => {
console.log('back-end started! 🚀');
});
view raw index.js hosted with ❤ by GitHub

Métodos HTTP:
São métodos utilizados para trafegar dados.

  • GET: Buscar informações no back-end
  • POST: Criar informações no back-end
  • PUT: Alterar informações no back-end
  • PATCH: Alterar informações no back-end
  • DELETE: Deletar informações no back-end

Parâmetros de Requisição:
São parâmetros enviados em requisições HTTP

  • Query Params: Filtros e paginação
  • Route Params: Identificar recursos (Atualizar/Deletar)
  • Request Body: Conteúdo na hora de criar ou editar um recurso (JSON)

Middleware:
Middleware é um interceptador de requisições.

  • Pode interromper uma requisição
  • Tem acessos à todos os parâmetros
  • Pode alterar dados em uma requisição
const express = require('express');
const { uuid, isUuid } = require('uuidv4');
const app = express();
app.use(express.json());
function logRequests(request, response, next){
const { method, url } = request;
const logLabel = `[${method.toUpperCase()}] ${url}`;
return next();
};
function validateProjectId(request, response, next){
const { id } = request.params;
if (!isUuid(id)) return response.status(400).json({ error: 'Invalid project ID. ' });
return next();
};
app.use(logRequests); // Middleware pode ser chamado para todas as rotas.
app.use('/projects/:id', validateProjectId); //Middleware pode ser chamado para uma rota específica.
view raw middleware.js hosted with ❤ by GitHub

Assim fica o arquivo no final, com o express, as rotas e os middlewares:

const express = require('express');
const { uuid, isUuid } = require('uuidv4');
const projects = [];
const app = express();
app.use(express.json());
//Middleware
function logRequests(request, response, next){
const { method, url } = request;
const logLabel = `[${method.toUpperCase()}] ${url}`;
console.log(logLabel);
console.time(logLabel);
console.log(1);
next();
console.log(2);
console.timeEnd(logLabel);
};
//Middleware
function validateProjectId(request, response, next){
const { id } = request.params;
if (!isUuid(id)) return response.status(400).json({ error: 'Invalid project ID. ' });
return next();
};
app.use(logRequests);
app.use('/projects/:id', validateProjectId); //Middlewares podem ser chamados aqui, ou em cada rota
app.get('/projects', (request, response) => {
console.log(3);
const { title, owner } = request.query;
const results = title ? projects.filter(project => project.title.includes(title)) : projects;
return response.json(results);
});
app.post('/projects', (request, response) => {
const { title, owner } = request.body;
const project = { id: uuid(), title, owner };
projects.push(project);
return response.json(project);
});
app.put('/projects/:id', (request, response) => {
const { id } = request.params;
let projectIndex = projects.findIndex( project => project.id === id );
if ( projectIndex < 0 ) return response.status(400).json({ error: 'Project not found.' });
const project = {
id,
title,
owner
};
projects[projectIndex] = project;
return response.json(project);
});
app.delete('/projects/:id', (request, response) => {
const { id } = request.params;
let projectIndex = projects.findIndex( project => project.id === id );
if ( projectIndex < 0 ) return response.status(400).json({ error: 'Can not delete.' });
projects.splice(projectIndex, 1);
return response.send();
});
app.listen(3333, () => {
console.log('back-end started! 🚀');
});
view raw index.js hosted with ❤ by GitHub

AWS GenAI LIVE image

How is generative AI increasing efficiency?

Join AWS GenAI LIVE! to find out how gen AI is reshaping productivity, streamlining processes, and driving innovation.

Learn more

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Instrument, monitor, fix: a hands-on debugging session

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

Tune in to the full event

DEV is partnering to bring live events to the community. Join us or dismiss this billboard if you're not interested. ❤️