O que são parâmetros "res" e "req" nas funções Express?

183

Na seguinte função Express:

app.get('/user/:id', function(req, res){
    res.send('user' + req.params.id);
});

O que são reqe res? O que eles representam, o que eles significam e o que eles fazem?

Obrigado!

expressnoob
fonte
1
req== "request"// res=="response"
nilon 24/01

Respostas:

270

reqé um objeto que contém informações sobre a solicitação HTTP que gerou o evento. Em resposta a req, você usa respara enviar de volta a resposta HTTP desejada.

Esses parâmetros podem ter qualquer nome. Você pode alterar esse código para isso se for mais claro:

app.get('/user/:id', function(request, response){
  response.send('user ' + request.params.id);
});

Editar:

Digamos que você tenha este método:

app.get('/people.json', function(request, response) { });

A solicitação será um objeto com propriedades como estas (apenas para citar alguns):

  • request.url, que será "/people.json"quando essa ação específica for acionada
  • request.method, que será "GET"neste caso, daí a app.get()chamada.
  • Uma matriz de cabeçalhos HTTP request.headers, contendo itens como request.headers.accept, que você pode usar para determinar que tipo de navegador fez a solicitação, que tipo de respostas ele pode manipular, se é capaz de entender ou não a compactação HTTP etc.
  • Uma matriz de parâmetros de string de consulta, se houver algum, em request.query(por exemplo /people.json?foo=bar, resultaria em request.query.fooconter a string "bar").

Para responder a essa solicitação, use o objeto de resposta para criar sua resposta. Para expandir no people.jsonexemplo:

app.get('/people.json', function(request, response) {
  // We want to set the content-type header so that the browser understands
  //  the content of the response.
  response.contentType('application/json');

  // Normally, the data is fetched from a database, but we can cheat:
  var people = [
    { name: 'Dave', location: 'Atlanta' },
    { name: 'Santa Claus', location: 'North Pole' },
    { name: 'Man in the Moon', location: 'The Moon' }
  ];

  // Since the request is for a JSON representation of the people, we
  //  should JSON serialize them. The built-in JSON.stringify() function
  //  does that.
  var peopleJSON = JSON.stringify(people);

  // Now, we can use the response object's send method to push that string
  //  of people JSON back to the browser in response to this request:
  response.send(peopleJSON);
});
Dave Ward
fonte
1
você pode usar curl para ver a completa resposta com cabeçalhos
generalhenry
3
Você pode querer conferir: en.wikipedia.org/wiki/Hypertext_Transfer_Protocol . Não sendo sarcástico, é algo que todos nós que desenvolvemos para a Web precisamos conhecer!
TK-421
7
Sim, isso foi ótimo, deve estar na página principal do site express.js.
Anton
expressnoob - response é um objeto, assim como o objeto de solicitação, mas contém campos e métodos pertencentes à resposta. Normalmente, o método send () da resposta é usado. O send () aceita vários tipos diferentes para o primeiro argumento, que se torna o corpo da resposta HTTP, e o segundo argumento é o código de resposta HTTP.
grantwparks
7
Se alguém está procurando detalhes de reqe resestrutura, é descrito no docs Express: req: expressjs.com/en/api.html#req , res: expressjs.com/en/api.html#res
AKN
25

Percebi um erro na resposta de Dave Ward (talvez uma alteração recente?): Os paramaters de string de consulta estão dentro request.query, não request.params. (Consulte https://stackoverflow.com/a/6913287/166530 )

request.params por padrão, é preenchido com o valor de qualquer "correspondência de componente" nas rotas, ou seja,

app.get('/user/:id', function(request, response){
  response.send('user ' + request.params.id);
});

e, se você configurou o express para usar seu bodyparser ( app.use(express.bodyParser());) também com os dados do formulário do POST. (Consulte Como recuperar parâmetros de consulta POST? )

Myrne Stol
fonte
6

Pedido e resposta.

Para entender req, experimente console.log(req);.

generalhenry
fonte
3
Isso não ajuda; a saída no console é [objeto Objeto].
JEC
Se você quiser o json, precisará: console.log (JSON.Stringify (req.body);
maridob 18/04