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: GETPOSTPUT, 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" );