Pregunta

En la siguiente función Express:

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

¿Cuáles son req y res? ¿Qué es lo que representan, qué significan, y qué es lo que hacen?

Gracias!

¿Fue útil?

Solución

req es un objeto que contiene información acerca de la solicitud HTTP que provoca el evento. En respuesta a req, utiliza res para enviar de vuelta la respuesta HTTP deseada.

Estos parámetros pueden tener cualquier nombre. Se podría cambiar ese código a este si es más claro:

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

Editar:

Supongamos que tiene este método:

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

La solicitud será un objeto con propiedades como éstas (sólo para nombrar unos pocos):

  • request.url, que será "/people.json" cuando se activa esta acción en particular
  • request.method, que será "GET" en este caso, por lo tanto, la llamada app.get().
  • Una serie de cabeceras HTTP en request.headers, que contiene elementos como request.headers.accept, que se puede utilizar para determinar qué tipo de navegador hizo la petición, qué tipo de respuestas que puede manejar, si es o no es capaz de entender la compresión HTTP, etc.
  • una matriz de parámetros de cadena de consulta si hay alguna, en request.query (por ejemplo /people.json?foo=bar resultaría en request.query.foo que contiene el "bar" cadena).

Para responder a esta solicitud, se utiliza el objeto respuesta para construir su respuesta. Para ampliar el ejemplo people.json:

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);
});

Otros consejos

Me di cuenta de un error en la respuesta de Dave Ward (tal vez un cambio reciente?): Los parametros de cadena de consulta están en request.query, no request.params. (Véase https://stackoverflow.com/a/6913287/166530 )

request.params por defecto se rellena con el valor de ningún "coincidencias" de componentes en las rutas, es decir.

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

y, si ha configurado expreso para utilizar su bodyparser (app.use(express.bodyParser());), también con POST'ed FormData. (Véase Cómo recuperar la POST parámetros de consulta? )

Solicitud y respuesta.

Para entender el req, probar console.log(req);.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top