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

StackOverflow https://stackoverflow.com/questions/4696283

  •  11-10-2019
  •  | 
  •  

Question

Dans la fonction express suivante:

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

Quels sont req et res? Qu'est-ce qu'ils représentent, que signifient-ils et que font-ils?

Merci!

Était-ce utile?

La solution

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

Ces paramètres peuvent être quoi que ce soit nommé. Vous pouvez changer ce code pour cela s'il est plus clair:

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

Edit:

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 ne citer que quelques-uns):

  • 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 de têtes HTTP dans request.headers, contenant des articles comme request.headers.accept, que vous pouvez utiliser pour déterminer quel type de navigateur fait la demande, quel genre de réponses qu'il peut gérer, si oui ou non il est en mesure de comprendre la compression HTTP, etc.
  • Un tableau de paramètres de chaîne de requête s'il y en avait, en request.query (par exemple /people.json?foo=bar entraînerait request.query.foo contenant la chaîne "bar").

Pour répondre à cette demande, vous utilisez l'objet de réponse pour construire votre réponse. Pour développer l'exemple de 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);
});

Autres conseils

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

request.params par défaut est rempli avec la valeur de tous les composants « correspond » dans routes, i.e..

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

et, si vous avez configuré exprès d'utiliser son bodyparser (app.use(express.bodyParser());) aussi avec POSTées formdata. (Voir Comment récupérer les paramètres POST de la requête )

Demande et réponse.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top