213 votes

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

Quels sont req y res ? Que représentent-ils, que signifient-ils, et que font-ils ?

Merci !

2 votes

req == "request" // res == "response"

1 votes

Je voulais également ajouter mon opinion, nous devrions préférer utiliser le nom des paramètres comme demande/réponse plutôt que req/res car il n'y a qu'une différence de caractère, qui peut devenir la cause du bug, une fois que notre base de code augmente. Merci.

313voto

Dave Ward Points 36006

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 porter n'importe quel nom. Vous pourriez changer ce code en ceci si c'est plus clair :

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

Editar:

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

  • request.url qui sera "/people.json" quand cette action particulière est déclenchée
  • request.method qui sera "GET" dans ce cas, d'où la app.get() appeler.
  • 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 traiter, s'il est capable ou non de comprendre la compression HTTP, etc.
  • Un tableau des paramètres de la chaîne de requête, s'il y en a, dans le format request.query (par exemple /people.json?foo=bar aurait pour conséquence request.query.foo contenant la chaîne de caractères "bar" ).

Pour répondre à cette demande, vous utilisez l'objet réponse pour construire votre réponse. Pour développer l'objet people.json exemple :

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

1 votes

Vous pouvez utiliser curl pour voir la réponse complète avec les en-têtes

3 votes

Vous pourriez vouloir vérifier : fr.wikipedia.org/wiki/Hypertext_Transfer_Protocol . Sans vouloir être désagréable, c'est quelque chose que tous ceux d'entre nous qui développent pour le Web doivent savoir !

7 votes

Oui, c'était génial, ça devrait être sur la page principale du site express.js.

26voto

Meryn Stol Points 4099

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

request.params est rempli par défaut avec la valeur de toutes les "correspondances de composants" 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 des données de formulaire POST'ed. (Voir Comment récupérer les paramètres de requête POST ? )

6voto

generalhenry Points 9763

Demande et réponse.

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

3 votes

Cela n'aide pas ; la sortie dans la console est [object Object].

0 votes

Si vous voulez du json, vous devez : console.log(JSON.Stringify(req.body) ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X