Forked from Briofita09/Routes_and_Controllers.md
Last active
January 23, 2023 22:04
-
-
Save cfigueiroa/f88900954070ea86eeaa486c0c815f51 to your computer and use it in GitHub Desktop.
Revisions
-
cfigueiroa revised this gist
Jan 23, 2023 . 1 changed file with 71 additions and 3 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal 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. ```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: ```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. ```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. -
Briofita09 created this gist
Jan 20, 2023 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal 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  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.  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:  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  Vamos falar especificamente do userController, já que estavamos falando dele no router.  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.