¿Cuáles son “res” y los parámetros “REQ” en funciones Express?
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!
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 llamadaapp.get()
. - Una serie de cabeceras HTTP en
request.headers
, que contiene elementos comorequest.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 enrequest.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);
.