Após trabalhar alguns anos com Java no backend decidi sair da zona de conforto e conhecer o NodeJS. Para um projeto de um cliente decidi utilizá-lo com o MongoDB. E a melhor forma de aprender e se propor a ensinar.
Um dos posts mais visualizados do blog é Criando e consumindo um serviço REST com Java. Sabendo disso, decidi escrever este para mostrar o processo de criação com NodeJS.
Iniciando o projeto
Crie uma pasta chamada rest-nodejs, acesse ela via terminal e execute o comando abaixo para criar o package.json.
npm init -y
Agora iremos adicionar 2 dependências ao nosso projeto
yarn add express body-parser
A primeira delas é o express que irá nos ajudar na tratativa de rotas e requests. A segunda é o body-parser que interpreta o body e parâmetros enviados via URL.
Criando crudController com método POST
Agora crie um diretório chamado src/app/controller. Dentro dessa pasta crie uma arquivo chamado crudController.js
const express = require('express'); //Importação do express const router = express.Router(); //Variável de rota var pessoas = []; //Array estático de pessoas var idPessoa = 0; //Variável que irá controlar os Ids gerados // Rota de inserção router.post('/', (req, res) => { const pessoa = { id: ++idPessoa, nome: req.body.nome }; pessoas.push(pessoa); return res.status(201).send({ pessoas }); }); //Exportação do controller. Variável 'app' será passado por parâmetro module.exports = app => app.use('/crud', router);
Criando index.js
Ótimo! agora precisamos criar o arquivo index.js que vai ficar dentro de src.
const express = require('express'); //Importação do express const bodyParser = require('body-parser') //Importação do body-parser const app = express(); //Variável app app.use(bodyParser.json()); //Define que a aplicação irá receber objetos do tipo json app.use(bodyParser.urlencoded({ extended: false })); //Utilizado para entender parâmetros via URL require('./app/controller/crudController')(app); //Importação do controller criado passando a váriavel app adiante app.listen(3000); //Porta que a aplicação ficará ouvindo
Veja como ficou a estrutura de pastas do projeto:
Testando inclusão (POST)
Inicialize o arquivo src/index.js
node src/index.js
Feito esse procedimento podemos testar a inserção de acordo com o Endpoint que foi criado. Utilize a ferramenta de sua preferência, eu utilizo o Postman.
Método: POST
URL: http://localhost:3000/crud
Body: { "nome": "Ronaldo" }
Após três persistências, veja o resultado:
{ "pessoas": [ { "id": 1, "nome": "Ronaldo" }, { "id": 2, "nome": "Rivaldo" }, { "id": 3, "nome": "Cafu" } ] }
Criando método (PUT)
Vamos para o Endpoint de edição que também será adicionado no crudController.
// Rota de edição router.put('/:id', (req, res) => { pessoas = pessoas.map(pessoa => { if (pessoa.id == req.params.id) pessoa.nome = req.body.nome; return pessoa; }); return res.status(200).send({ pessoas }); });
Testando alteração (PUT)
Vamos substituir o Ronaldo pelo Romário.
Método: PUT
URL: http://localhost:3000/crud/1
Body: { "nome": "Romário" }
Agora como resultado temos:
{ "pessoas": [ { "id": 1, "nome": "Romário" }, { "id": 2, "nome": "Rivaldo" }, { "id": 3, "nome": "Cafu" } ] }
Criando método (DELETE)
// Rota de exclusão router.delete('/:id', (req, res) => { pessoas = pessoas.filter(pessoa => pessoa.id != req.params.id); return res.status(200).send({ pessoas }); });
Testando exclusão (DELETE)
Para remover um jogador é simples:
Método: DELETE
URL: http://localhost:3000/crud/3
Nova lista:
{ "pessoas": [ { "id": 1, "nome": "Romário" }, { "id": 2, "nome": "Rivaldo" } ] }
Criando método listarTodos(GET) e buscarPorId(GET)
Bacana! E como fazer para listar tudo e por id?
// Rota para buscar todos router.get('/', (req, res) => res.status(200).send({ pessoas })); // Rota buscar por id router.get('/:id', (req, res) => { const pessoa = pessoas.find(pessoa => pessoa.id == req.params.id); return res.status(200).send({ pessoa }); });
Testando método listarTodos(GET) e buscarPorId(GET)
Método: GET
URL: http://localhost:3000/crud
{ "pessoas": [ { "id": 1, "nome": "Romário" }, { "id": 2, "nome": "Rivaldo" } ] }
Método: GET
URL: http://localhost:3000/crud/2
{ "pessoa": { "id": 2, "nome": "Rivaldo" } }
Em um próximo post pretendo fazer um comparativo entre o serviço criado em Java com o NodeJS. Disponibilizei no GitHub o código fonte junto com a collection do Postman. Até a próxima! 😀