Node

Microserviço para Autenticação e Gerenciamento de Usuários - REST API

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.

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.

References

  • expressjs.com/pt-br/guide/using-middleware.html