Ciclo Pedido-Resposta
Quando fazemos um pedido a um servidor Express iniciamos o ciclo pedido-resposta. Esse ciclo termina, normalmente, com o envio de uma resposta por parte do servidor para o cliente, usando as funções end(), send() etc.
O ciclo pedido-resposta em Express tem de ser terminado com uma destas funções caso contrário o ciclo não termina e o cliente não recebe resposta.
Quando o pedido é enviado o Express fornece dois objetos: um para o pedido (request) e outro para a resposta (response).
O objeto Request
O objeto Request representa o pedido e possui propriedades para o query string, parâmetros, body, HTTP headers, etc.
req.body
Contém pares de dados chave-valor enviados no corpo do pedido. Por padrão, ele é undefined e é preenchido quando você usa o middleware body-parser, como express.json () ou express.urlencoded ().
O exemplo a seguir mostra como usar o middleware body-parser para preencher req.body.
var express = require('express')
var app = express()
app.use(express.json()) // for parsing application/json
app.use(express.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded
app.post('/profile', function (req, res, next) {
  console.log(req.body)
  res.json(req.body)
})req.method
Contém uma string com o nome do método de HTTP usado no pedido: GET, POST, PUT, DELETE, etc..
req.params
Contém os parâmetros do pedido.
Por exemplo, se a rota do pedido fôr /user/:name/:age
req.params terá as propriedades req.params.name e req.params.age.
req.path
Esta propriedade contém o path do url do pedido.
Se o url do pedido fôr: example.com/users?sort=desc
A propriedade retornará: /users.
req.query
Esta propriedade é um objeto contendo uma propriedade para cada parâmetro da query string da rota.
Se a rota fôr /users?name=xico&age=21
teremos req.query.name e req.query.age
O objeto Response
O objeto Response representa a resposta que a aplicação Express envia quando recebe um pedido.
res.end()
Este método termina o ciclo pedido-resposta com o envio da resposta ao cliente.
Se se pretender enviar dados, pode-se usar os métodos res.send(), res.sendFile() ou res,json().
Exemplos:
res.end()
res.status(404).end()res.json()
Este método envia dados em json na resposta.
O parâmetro pode ser qualquer tipo JSON, incluindo objeto, array, string, booleano, número ou nulo.
Exemplo:
res.json(null)
res.json({ user: 'tobi' })
res.status(500).json({ error: 'message' })res.send()
Este método envia dados na resposta.
Exemplo:
res.send(Buffer.from('whoop'))
res.send({ some: 'json' })
res.send('<p>some html</p>')
res.status(404).send('Sorry, we cannot find that!')
res.status(500).send({ error: 'something blew up' })res.sendFile()
Este método envia um ficheiro na resposta.
Exemplo:
res.sendFile( __dirname + "/" + "index.html" );