Biblioteca Express - Introdução
Express é uma biblioteca pequena e simples para gerenciamento de rotas HTTP.
O objetivo é criar um servidor HTTP Express que responda as requisições em uma determinada porta e fique ativo durante a execução.
Biblioteca Express - Instalação e Configuração
Instalação da Biblioteca Express
npm install --save express
O arquivo package.json será alterado para incluir o Express como dependência.
"dependencies": {
"express": "^4.17.1"
}
Importação da biblioteca Express no projeto para utilização.
import express from 'express';
Instalação dos @types do TypeScript para o Express
@types são instalados somente em ambiente de desenvolvimento.
npm install --save-dev @types/express
O arquivo package.json será alterado para incluir como dependência de desenvolvimento.
"devDependencies": {
"@types/express": "^4.17.13",
"@types/node": "^17.0.7",
"typescript": "^4.5.4"
},
Biblioteca Express - Criação do Servidor
Criação do server sem Router (index.ts)
// Importações
import express, { Request, Response, NextFunction} from 'express';
// Instanciando o express
const app = express();
// Endpoint para consultar o status do servidor
app.get('/status', (req: Request, res: Response, next: NextFunction) => {
res.status(200).send({ message: 'Hello World!' });
});
// Inicialização do servidor (Subir e ficar escutando na porta 3000)
app.listen(3000, () => {
console.log('Server running on port 3000');
});
Criação do server com Router (index.ts)
Router permite criar configurações de rotas.
É uma forma de configurar as coisas separadamente.
Sem precisar ficar amarrado a instância do express.
import express from 'express';
import usersRoute from './routes/users.route';
import statusRoute from './routes/status.route';
// Instanciando o express
const app = express();
// Configurações Globais
// Add middleware para lidar com o Content-Type: application/json
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Configurações de Rotas (Criadas separadamente, normalmente por domínio)
app.use(statusRoute);
app.use(usersRoute);
// Inicialização do servidor (Subir e ficar escutando na porta 3000)
app.listen(3000, () => {
console.log('Server running on port 3000');
});
Node não trabalha com JSON (que é string, texto), mas sim com objetos, então é necessário converter o JSON em um objeto.
Recomendações:
1. Criar um diretório especifico para armazenar as configurações de rotas
Por exemplo: ./src/routes
2. Criar uma instância de Router para cada domínio.
Por exemplo: ./src/routes/users.route.ts, ./src/routes/posts.route.ts, ./src/routes/comments.route.ts, etc.
Criação da rota status (src/routes/status.route.ts)
import { Router, Request, Response, NextFunction } from 'express';
import { StatusCodes } from 'http-status-codes';
const statusRoute = Router();
statusRoute.get('/status', (req: Request, res: Response, next: NextFunction) => {
res.status(StatusCodes.OK).send({ result: 'testing...OK' });
});
export default statusRoute;
Tipagem de parâmetros (req, res, next) com TypeScript para poder validar em tempo de desenvolvimento.
// Import sem validação de tipos
import express from 'express';
// Import com validação de tipos
import express, { Request, Response, NextFunction} from 'express';
Middlewares
É todo tipo de função que está entre uma requisição HTTP e sua respectiva resposta.
É um meio de campo, que recebem os parâmetros requisição (req), resposta (res) e próximo (next), executam alguma lógica e chamam o próximo middleware através do método next() do express.
Um aplicativo do Express é essencialmente uma série de chamadas de funções de middleware.