Node - Criando uma API Restful com Express acessando o Mongodb - IV

 Neste artigo vou mostrar como criar uma API Restful usando o Nodejs e os recursos do Express e acessando um banco de dados MongoDB.

Neste artigo vamos definir as rotas da nossa aplicação.

Definindo as rotas da nossa aplicação

Para definir as rotas da nossa aplicação vamos utilizar os recursos do Express.

Segundo a documentação do Express, que pode ser consulta neste link: http://expressjs.com/pt-br/starter/basic-routing.html, temos que o roteamento refere-se à determinação de como um aplicativo responde a uma solicitação do cliente por um endpoint específico, que é uma URI (ou caminho) e um método de solicitação HTTP específico (GET, POST, e assim por diante).

Cada rota pode ter uma ou mais funções de manipulação, que são executadas quando a rota é correspondida.

A definição de rotas aceita a seguinte estrutura:  app.METHOD(PATH, HANDLER)
Onde:

  • app é uma instância do express.

  • METHOD é um método de solicitação HTTP: GET, PUT, POST, DELETE , PATCH, etc.

  • PATH é um caminho no servidor.

  • HANDLER é a função executada quando a rota é correspondida.

Os seguintes exemplos ilustram a definição de rotas simples.

Responder a uma solicitação (GET) na página inicial na rota raiz (/) :

app.get('/', function (req, res) {
  res.send('´Bem vindo ao Express!');
});

Responder a uma solicitação POST na rota /teste (/teste) com a página inicial do aplicativo:
app.post('/teste', function (req, res) {
  res.send('respondendo a um POST');
});

Nos exemplos acima criamos rotas e definimos o tratamento que será dado a esse roteamento. 

Os métodos do objeto de resposta (res) enviam uma resposta ao cliente. Se nenhum destes métodos forem chamados a partir de um manipulador de rota, a solicitação do cliente será deixada em suspenso. A seguir temos os principais métodos de respostas usados (retirado de : http://expressjs.com/pt-br/guide/routing.html (acessado em abril de 2017))

Método Descrição
res.download() Solicita que seja efetuado o download de um arquivo
res.end() Termina o processo de resposta.
res.json() Envia uma resposta JSON.
res.jsonp() Envia uma resposta JSON com suporta ao JSONP.
res.redirect() Redireciona uma solicitação.
res.render() Renderiza um modelo de visualização.
res.send() Envia uma resposta de vários tipos.
res.sendFile Envia um arquivo como um fluxo de octeto.
res.sendStatus() Configura o código do status de resposta e envia a sua representação em sequência de caracteres como o corpo de resposta.
Vamos fazer a mesma coisa em nossa aplicação. 

Apenas para mostrar o funcionamento das rotas vamos abrir o nosso projeto no VS Code e alterar o código do arquivo app.js conforme mostrado abaixo incluindo as linhas destacadas em azul :

var express = require('express');
var mongoose = require('mongoose');
var app = express();
var url = 'mongodb://seu_usuario:sua_senha@ds145370.mlab.com:45370/produtosdb'
var db = mongoose.connection;
db.on('error', console.error);
db.once('open', function() {
  console.log('Conectado ao banco de dados produtosdb MongoDB.')
});
mongoose.connect(url);
app.listen(5000, function () {
    console.log('Servidor escutando na porta 5000');
});
app.get('/', function (req, res) {
  res.send('´Bem vindo ao Express!');
});
app.get('/teste', function (req, res) {
  res.send('respondento a solicitação em /teste');
});

No código definimos duas rotas :  a rota raiz (/) e a rota /teste que estão respondendo com uma mensagem texto.

Vamos executar a nossa aplicação usando o Nodemon de forma que não precisaremos mais interromper a execução do servidor após qualquer alteração no código.

Abra um terminal e digite seguinte comando : nodemon app

Nosso servidor esta funcionando e agora não precisaremos mais interrompê-lo.

Agora abra um navegador e navegue para os dois endereços abaixo:

A seguir vemos o resultado obtido que confirma que nosso roteamento esta funcionando:

Essa forma de roteamento é a mais simples possível mas podemos usar o Router do Express para criar manipuladores de rotas modulares e montáveis.

Uma instância de Router é um middleware e um sistema de roteamento completo; por essa razão, ela é frequentemente referida como um “mini-aplicativo”.

Para mostrar como o Router funciona vamos alterar o código do arquivo app.js incluindo as linhas destacadas em azul:

var express = require('express');
var mongoose = require('mongoose');
var app = express();
var router = express.Router();
var url = 'mongodb://seu_usuario:sua_senha@ds145370.mlab.com:45370/produtosdb'
var db = mongoose.connection;
db.on('error', console.error);
db.once('open', function() {
  console.log('Conectado ao banco de dados produtosdb MongoDB.')
});
mongoose.connect(url);
app.listen(5000, function () {
    console.log('Servidor escutando na porta 5000');
});
router.get('/', function(req, res) {
    res.send('Esta é página principal!');  
});
router.get('/teste', function(req, res) {
    res.send('Esta é a página teste'); 
});
// aplica as rotas em nossa aplicação
app.use('/', router);

No código estamos criando uma instância de Router a partir da instãncia do Express que foi criada anteriormente e a seguir definimos as rotas raiz (/) e /teste.

Note que tivemos que aplicar o roteamento usando app.use().

Após salvar basta abrir um navegador e navegar para as rotas definidas. Abaixo temos o resultado:

Agora que você já conhece o básico sobre o roteamento no Express (consulte a documentação para mais recursos), vamos definir o nosso roteamento criando o arquivo produtosRoute.js na pasta routes.

Abra a pasta routes e no menu clique no ícone New File e informe o nome produtosRoute.js. A seguir inclua o código abaixo neste arquivo:

var express = require('express');
var produtosRouter = express.Router();
produtosRouter.route('')
    .get(function (req,res) {
         res.send("Exibindo a página principal...");
     }
module.exports = produtosRouter; 

No código cima definimos um roteamento para uma instância produtosRouter de Router e exportamos a instância para podermos usar na aplicação.

A seguir altere o código do arquivo app.js incluindo as linhas destacadas em azul:

var express = require('express');
var mongoose = require('mongoose');
var produtosRouter = require('./routes/ProdutosRoute');
var app = express();
var url = 'mongodb://seu_usuario:sua_senha@ds145370.mlab.com:45370/produtosdb'
var db = mongoose.connection;
db.on('error', console.error);
db.once('open', function() {
  console.log('Conectado ao banco de dados produtosdb MongoDB.')
});
mongoose.connect(url);
app.listen(5000, function () {
    console.log('Servidor escutando na porta 5000');
});
app.use('/produtos',produtosRouter); 

 

No código acima precisamos importar uma instância de ProdutosRoute e depois aplicar o roteamento usando o comando:

app.use('/produtos',produtosRouter);

Este comando defina a rota /produtos que será tratada pela instãncia ProdutosRoute. Abrindo um navegado e navegando para http://localhost:500/produtos teremos:

Dessa forma testamos o roteamento criado no arquivo ProdutosRoute.js com sucesso.

Embora o código funcione ele pode ser melhorado e seguindo o princípio da responsabilidade única vamos separar do arquivo ProdutosRoute a lógica que trata o atendimento do roteamento definindo essas ações em outro arquivo.

Para isso vamos usar a pasta controllers e criar controladores que irão realizar a ação de tratamento da requisição e resposta ao nosso roteamento. Assim separamos as responsabilidade e temos um código mais fácil de entender e manter.

Na próxima parte do artigo vamos criar os controladores e continuar definindo as rotas usadas em nossa API.

Respondeu Jesus, e disse-lhes: Ainda que eu testifico de mim mesmo, o meu testemunho é verdadeiro, porque sei de onde vim, e para onde vou; mas vós não sabeis de onde venho, nem para onde vou.
Vós julgais segundo a carne; eu a ninguém julgo.
E, se na verdade julgo, o meu juízo é verdadeiro, porque não sou eu só, mas eu e o Pai que me enviou.

João 8:14-16

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti