web-dev-qa-db-fra.com

Que sont les paramètres "res" et "req" dans les fonctions Express?

Dans la fonction Express suivante:

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

Que sont req et res? Que représentent-ils, que veulent-ils dire et que font-ils?

Merci!

163
expressnoob

req est un objet contenant des informations sur la requête HTTP qui a déclenché l'événement. En réponse à req, vous utilisez res pour renvoyer la réponse HTTP souhaitée.

Ces paramètres peuvent être nommés n'importe quoi. Vous pouvez changer ce code en ceci s'il est plus clair:

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

Modifier:

Disons que vous avez cette méthode:

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

La demande sera un objet avec des propriétés comme celles-ci (pour n'en nommer que quelques-unes):

  • _request.url_, qui sera _"/people.json"_ lorsque cette action particulière est déclenchée
  • _request.method_, qui sera _"GET"_ dans ce cas, d'où l'appel app.get().
  • Un tableau d'en-têtes HTTP dans _request.headers_, contenant des éléments tels que _request.headers.accept_, que vous pouvez utiliser pour déterminer le type de navigateur à l'origine de la demande, le type de réponses qu'il peut gérer, s'il est capable de comprendre ou non. Compression HTTP, etc.
  • Un tableau de paramètres de chaîne de requête, le cas échéant, dans _request.query_ (par exemple, _/people.json?foo=bar_ aurait pour résultat _request.query.foo_ contenant la chaîne _"bar"_).

Pour répondre à cette demande, vous utilisez l'objet response pour générer votre réponse. Pour développer l'exemple _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);
});
_
239
Dave Ward

J'ai remarqué une erreur dans la réponse de Dave Ward (peut-être une modification récente?): Les paramètres de chaîne de requête sont dans request.query, pas request.params. (Voir https://stackoverflow.com/a/6913287/1665 )

request.params par défaut, la valeur de "correspondances de composant" est renseignée dans les itinéraires, c'est-à-dire.

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

et, si vous avez configuré Express pour utiliser son afficheur de caractères (app.use(express.bodyParser());) également avec les données de formulaire POST. (Voir Comment récupérer POST paramètres de requête? )

23
Myrne Stol

Demande et réponse.

Pour comprendre la req, essayez console.log(req);.

5
generalhenry