Skip to content

Instantly share code, notes, and snippets.

@cfigueiroa
Forked from Briofita09/Routes_and_Controllers.md
Last active January 23, 2023 22:04
Show Gist options
  • Select an option

  • Save cfigueiroa/f88900954070ea86eeaa486c0c815f51 to your computer and use it in GitHub Desktop.

Select an option

Save cfigueiroa/f88900954070ea86eeaa486c0c815f51 to your computer and use it in GitHub Desktop.

Revisions

  1. cfigueiroa revised this gist Jan 23, 2023. 1 changed file with 71 additions and 3 deletions.
    74 changes: 71 additions & 3 deletions Routes_and_Controllers.md
    Original file line number Diff line number Diff line change
    @@ -11,7 +11,29 @@ Quanto mais sua aplicação cresce, maior é a necessidade para uma organizaçã

    O exemplo acima possui duas pastas diferentes, uma para cada roteamento. Vamos olhar o roteamento dos usuários e ver como ele pode ser construído.

    ![image](https://user-images.githubusercontent.com/69055282/213811525-2f4a7aa0-1731-4e6b-b434-553b8e2bd529.png)
    ```javascript
    import { Router } from 'express';
    import { validateSchemaMiddleware } from '…/…/middlewares/index.js';
    import * as userController from '…/…/controllers/userController/index.js';

    import { LoginSchema, SignUpSchema } from '…/…/schemas/userSchema/index.js';

    const userRouter = Router();

    userRouter.post(
    '/sign-up',
    validateSchemaMiddleware(SignUpSchema),
    userController.createUser
    );

    userRouter.post(
    '/login',
    validateSchemaMiddleware(LoginSchema),
    userController.loginUser
    );

    export { userRouter };
    ```

    Na linha 1 importamos o Router diretamente do express. A Linha 2 é responsável por importar os middlewares, enquanto a linha 3 é responsável por importar os controllers e por fim a linha 5 importa os schemas de usuário.
    Na linha 7 é criada uma variável que vai instânciar o Router do express para que o possamos utiliza-lo.
    @@ -21,7 +43,24 @@ Por fim, exportamos `userRouter` na linha 21.

    Antes de irmos a camada controller, vamos ver o que tem que ser modificado no arquivo onde antigamente ficavam as rotas e onde o express está instânciado:

    ![image](https://user-images.githubusercontent.com/69055282/213813324-a3e428e7-2d65-4af8-951c-807b9c507bb0.png)
    ```javascript
    import express from 'express';
    import cors from 'cors';
    import 'dotenv/config';

    import { userRouter } from './routers/userRoutes/index.js';
    import { transactionRouter } from './routers/transactionRoutes/index.js';

    const app = express();

    app.use(cors()).use(express.json()).use(userRouter).use(transactionRouter);

    const PORT = process.env.PORT || 5000;

    app.listen(PORT, () => {
    console.log('servidor rodando na porta', PORT);
    });
    ```

    Na linha 5 importamos o `userRouter` que criamos anteriormente e usamos o método use e passamos o `userRouter` como parâmetro.

    @@ -33,6 +72,35 @@ Seguindo o padrão dos routers, aqui temos um controller para cada model

    Vamos falar especificamente do userController, já que estavamos falando dele no router.

    ![image](https://user-images.githubusercontent.com/69055282/213813694-fa71befb-3da3-4b3f-b280-943ac47966d4.png)
    ```javascript
    export async function createUser(req, res) {
    try {
    const user = req.body;
    const registeredUser = await db
    .collection('users')
    .find({ email: user.email })
    .toArray();
    if (registeredUser.length !== 0) {
    return res.status(409).json({ message: 'usuário já cadastrado' });
    }
    const salt = genSaltSync(numberOfSalts);
    const hashedPassword = bcrypt.hashSync(user.password, salt);
    const newUser = {
    user: user.name,
    email: user.email,
    password: hashedPassword,
    };
    const newRegisteredUser = await db.collection('users').insertOne(newUser);
    if (newRegisteredUser) {
    return res
    .status(201)
    .json({ message: 'usuário cadastrado com sucesso' });
    }
    } catch (err) {
    console.log(err);
    return res.status(500).json({ message: 'Erro interno do servidor' });
    }
    }
    ```

    Na camada de controller, a função `createUser`que chamamos no router é criada. Nela todas as regras de negócio, assim como o tratamento do body e das respostas é feito e enviado ao usuário.
  2. @Briofita09 Briofita09 created this gist Jan 20, 2023.
    38 changes: 38 additions & 0 deletions Routes_and_Controllers.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,38 @@
    **Routes and Controllers**

    Router e Controllers fazem parte da arquitetura em camadas do back-end.
    Esse padrão de arquitetura possui algumas outras camadas, mas vamos falar como criar as duas primeiras camadas do back-end:

    - **Criando Routers**

    Quanto mais sua aplicação cresce, maior é a necessidade para uma organização. A primeira tarefa é definir as rotas que a sua aplicação vai ter e para isso você vai precisar de uma pasta chamada "routes" dentro da sua src

    ![image](https://user-images.githubusercontent.com/69055282/213811155-e6dcb9f0-a323-4851-9f5e-9fdcc2117a03.png)

    O exemplo acima possui duas pastas diferentes, uma para cada roteamento. Vamos olhar o roteamento dos usuários e ver como ele pode ser construído.

    ![image](https://user-images.githubusercontent.com/69055282/213811525-2f4a7aa0-1731-4e6b-b434-553b8e2bd529.png)

    Na linha 1 importamos o Router diretamente do express. A Linha 2 é responsável por importar os middlewares, enquanto a linha 3 é responsável por importar os controllers e por fim a linha 5 importa os schemas de usuário.
    Na linha 7 é criada uma variável que vai instânciar o Router do express para que o possamos utiliza-lo.
    Assim, na linha 9 teremos nossa primeira rota. A rota `"/sign-up"` é criada utilizando o método post do Router que foi instânciado acima dentro da variável `userRouter`. Assim temos como primeiro parâmetro da função o exato endpoint, no caso, `"/sign-up"`, o segundo parâmetro é uma middleware de validação (não se atentem a ela por enquanto) e o terceiro parâmetro é a função denominada `createUser` que está na camada controller.
    Por fim, exportamos `userRouter` na linha 21.
    - **Alterando o app.js**:

    Antes de irmos a camada controller, vamos ver o que tem que ser modificado no arquivo onde antigamente ficavam as rotas e onde o express está instânciado:

    ![image](https://user-images.githubusercontent.com/69055282/213813324-a3e428e7-2d65-4af8-951c-807b9c507bb0.png)

    Na linha 5 importamos o `userRouter` que criamos anteriormente e usamos o método use e passamos o `userRouter` como parâmetro.

    - **Criando Controllers**:

    Seguindo o padrão dos routers, aqui temos um controller para cada model

    ![image](https://user-images.githubusercontent.com/69055282/213813939-70ca0e7d-b606-4b1b-b165-2a0217c6439f.png)

    Vamos falar especificamente do userController, já que estavamos falando dele no router.

    ![image](https://user-images.githubusercontent.com/69055282/213813694-fa71befb-3da3-4b3f-b280-943ac47966d4.png)

    Na camada de controller, a função `createUser`que chamamos no router é criada. Nela todas as regras de negócio, assim como o tratamento do body e das respostas é feito e enviado ao usuário.