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

183

Dans la fonction Express suivante:

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

Que sont req etres ? Que représentent-ils, que signifient-ils et que font-ils?

Merci!

expressnoob
la source
1
req== "request"// res=="response"
nilon

Réponses:

270

reqest un objet contenant des informations sur la requête HTTP qui a déclenché l'événement. En réponse à req, vous utilisezres 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 si c'est plus clair:

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

Éditer:

Disons que vous avez cette méthode:

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

La requête 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 sera déclenchée
  • request.method, qui sera "GET"dans ce cas, d'où l' app.get()appel.
  • 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 qui a effectué la requête, le type de réponses qu'il peut gérer, s'il est capable ou non de comprendre la compression HTTP, etc.
  • Un tableau de paramètres de chaîne de requête, s'il y en avait, dans request.query(par exemple, cela /people.json?foo=baraurait pour résultat de request.query.foocontenir la chaîne "bar").

Pour répondre à cette demande, vous utilisez l'objet de réponse pour créer votre réponse. Pour développer l' people.jsonexemple:

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
la source
1
vous pouvez utiliser curl pour voir la réponse complète avec les en
generalhenry
3
Vous voudrez peut-être consulter: en.wikipedia.org/wiki/Hypertext_Transfer_Protocol . Ne pas être sournois, c'est quelque chose que nous tous qui développons pour le Web devons savoir!
TK-421 du
7
Oui, c'était génial devrait être sur la page principale du site express.js.
Anton
expressnoob - response est un objet, tout comme l'objet de requête, mais il contient des champs et des méthodes relatifs à la réponse. Normalement, la méthode send () de la réponse est utilisée. send () accepte tout un tas de types différents pour le premier argument, qui devient le corps de la réponse HTTP, et le second argument est le code de la réponse HTTP.
Grantwparks
7
Si quelqu'un cherche des détails de reqet resstructure, il est décrit dans docs express: req: expressjs.com/en/api.html#req , res: expressjs.com/en/api.html#res
AKN
25

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

request.params par défaut est rempli avec la valeur de toute "correspondance de composant" dans les routes, 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 bodyparser ( app.use(express.bodyParser());) également avec les données de formulaire POST. (Voir Comment récupérer les paramètres de requête POST? )

Myrne Stol
la source
6

Demande et réponse.

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

généralhenry
la source
3
Cela n'aide pas; la sortie dans la console est [objet objet].
JEC le
Si vous voulez json, vous devez: console.log (JSON.Stringify (req.body);
maridob