Introdução
O req e res do Express, são os objetos de requisição e resposta em uma função de middleware do Express.
Um sistema ou uma API com o NodeJS e utilizando o framework Express, tem as rotas que podem ser acessadas.
Essas rotas, contém as funções que farão o processamento dos dados e devolver o resultado para quem fez a solicitação.
Essas funções, são os middlewares do Express, elas recebem uma requisição, processam os dados e devolvem uma resposta.
E o req e res são exatamente isso, o req é o request, o objeto de requisição, que contém todos os dados relacionados a requisição. O res é o response, que é a resposta que será enviada para quem fez a solicitação.
Req (request)
Normalmente é utilizado no middleware, somente a abreviação da palavra request.
Imagine que em uma API, contém uma rota para buscar todos os usuários do sistema, e nessa rota, é possível fazer um filtro pelo nome, como exemplo vamos usar José.
Quem for fazer a requisição para essa API, precisa enviar pelo menos duas informações para a API, que é a rota que ele fará a requisição, por exemplo /usuario
, e também o nome que deseja filtrar, que é o José.
A requisição para essa API, deve ser algo desse tipo:
http://localhost:3000/usuarios?nome=Jose
Essa requisição chega até a API, e quem é o responsável por ter os dados da solicitação do usuário, que indica a rota e o nome do usuário a ser buscado, é o req.
O req tem uma série de informações todas relacionadas a requisição, veja aqui uma lista completa de tudo que pode ser recebido em uma requisição.
Nesse caso, o Express, já irá encaminhar a rota, para a função de middleware correta, que trata as requisições de usuário.
E para pegar o nome do usuário que deseja filtrar, para retornar os usuários desejados, na função se utiliza o req.params, para pegar todos os parâmetros da requisição. A função fica dessa forma:
app.get('/usuarios', function (req, res) {
console.log(req.params.nome); //Jose
});
Nesse caso, o que foi recebido, foi um parâmetro da requisição.
Outro item importante que pode ser acessado pelo req, é o body da request.
Imagine agora que você irá fazer o cadastro de um usuário na API, quando for fazer a requisição, será enviado os dados do usuário, e a API precisa receber esses dados.
Para receber, é utilizado o req.body. É nessa chave que terá todos os dados do usuário que precisa ser salvo no banco de dados.
app.post('/usuarios', function (req, res) {
console.log(req.body.nome); //Jose
console.log(req.body.email); //josesilva@email.com
...
});
Após receber esses dados da chave body da requisição, é possível fazer tratamentos, manipulações e também inserir os dados no banco.
Res (response)
Normalmente é utilizado no middleware, somente a abreviação da palavra response.
O req tratou todos os dados relacionados a recepção dos dados na API, o response é o responsável pelo contrário, pelos dados e pela forma de saída dos dados da API. É a resposta para quem fez a solicitação.
Assim como o req, ele também tem uma série de dados que podem ser utilizados na resposta, veja a lista completa aqui.
Uma das possibilidades é colocar na resposta, um arquivo de anexo, para que seja enviado ao usuário, junto com os outros dados solicitados:
app.post('/usuarios', function (req, res) {
console.log(req.body.nome); //Jose
console.log(req.body.email); //josesilva@email.com
...
res.attachment('path/to/logo.png');
});
Outro item muito utilizado principalmente para o Login de usuários, é adicionar um Cookie na resposta. Normalmente depois de autenticado, é anexado um Cookie com o token que esse usuário terá para continuar fazendo as requests a aplicação:
res
.status(201)
.cookie('access_token', 'Bearer ' + token, {
expires: new Date(Date.now() + 8 * 3600000) // cookie expira em 8 horas
})
.cookie('test', 'test')
.redirect(301, '/admin')
Já utilizando essa mesma função, foi adicionado a função res, o redirect, no caso foi adicionado um cookie a resposta, e após isso foi feito o redirecionamento para uma rota de admin do sistema, que o usuário só pode ver ao estar logado.
Quando o sistema com o Node não é uma API, e ele precisa renderizar as telas, é utilizado no retorno da função o res.render.
O res.render, irá renderizar os arquivos de acordo com o engine de views utilizado no sistema, e ele pode ser utilizado dessa forma:
res.render('index'); //renderiza a view index
//renderiza a tela de usuário, passando o parâmetro nome = Jose
res.render('user', { name: 'Jose' }, function (err, html) {
// ...
})
Este segundo caso é muito comum, passar dados direto para uma view realizar a renderização dinâmica, e entre outros.
Vídeo
Conclusão
O req e o res, são os objetos de solicitação e resposta de um sistema ou API que utiliza o framework Express. Eles são essenciais para o controle de fluxo, recebimento de dados, recebimento de outras informações, formas de resposta do sistema e muito mais. Recomendo dar uma olhada em todas as possibilidades que o req e o res disponibilizam. Até o próximo post 🙂
Para ver outros canais onde o posto conteúdo e meu Github, veja os Links do Programando Soluções.
Referências:
https://expressjs.com/pt-br/guide/writing-middleware.html
https://expressjs.com/pt-br/4x/api.html#req
https://expressjs.com/pt-br/4x/api.html#res