Was sind die Parameter "res" und "req" in Express-Funktionen?

181

In der folgenden Express-Funktion:

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

Was sind reqund res? Wofür stehen sie, was meinen sie und was tun sie?

Vielen Dank!

expressnoob
quelle
1
req== "request"// res=="response"
nilon

Antworten:

266

reqist ein Objekt, das Informationen zu der HTTP-Anforderung enthält, die das Ereignis ausgelöst hat. Als Reaktion auf req, verwenden Sie resdie gewünschte HTTP - Antwort zurück zu senden.

Diese Parameter können beliebig benannt werden. Sie können diesen Code in diesen Code ändern, wenn es klarer ist:

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

Bearbeiten:

Angenommen, Sie haben diese Methode:

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

Die Anfrage ist ein Objekt mit Eigenschaften wie diesen (um nur einige zu nennen):

  • request.url"/people.json"Dies ist der Fall, wenn diese bestimmte Aktion ausgelöst wird
  • request.method, was "GET"in diesem Fall sein wird, daher der app.get()Aufruf.
  • Ein Array von HTTP-Headern request.headersmit Elementen wie request.headers.accept, mit denen Sie bestimmen können, welche Art von Browser die Anforderung gestellt hat, welche Art von Antworten verarbeitet werden können, ob die HTTP-Komprimierung verstanden werden kann oder nicht usw.
  • Ein Array von Abfragezeichenfolgenparametern, falls vorhanden, in request.query(z. B. /people.json?foo=barwürde dazu führen request.query.foo, dass die Zeichenfolge enthalten ist "bar").

Um auf diese Anfrage zu antworten, verwenden Sie das Antwortobjekt, um Ihre Antwort zu erstellen. So erweitern Sie das people.jsonBeispiel:

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
quelle
1
Sie können Curl verwenden, um die Antwort mit
Überschriften
3
Vielleicht möchten Sie Folgendes überprüfen: en.wikipedia.org/wiki/Hypertext_Transfer_Protocol . Nicht snarky zu sein, das müssen wir alle wissen, die wir für das Web entwickeln!
TK-421
7
Ja, das war großartig, sollte auf der Hauptseite der express.js-Website stehen.
Anton
expressnoob - response ist ein Objekt, genau wie das Request-Objekt, enthält jedoch Felder und Methoden, die sich auf die Antwort beziehen. Normalerweise wird die send () -Methode der Antwort verwendet. send () akzeptiert eine ganze Reihe verschiedener Typen für das erste Argument, das zum HTTP-Antworttext wird, und das zweite Argument ist der HTTP-Antwortcode.
Grantwparks
7
Wenn jemand für Details suchen reqund resStruktur ist es in Express docs beschrieben: req: expressjs.com/en/api.html#req , res: expressjs.com/en/api.html#res
AKN
25

Ich habe einen Fehler in Dave Wards Antwort bemerkt (vielleicht eine kürzliche Änderung?): Die Parameter der Abfragezeichenfolge sind in request.query, nicht request.params. (Siehe https://stackoverflow.com/a/6913287/166530 )

request.params Standardmäßig ist der Wert aller "Komponentenübereinstimmungen" in Routen angegeben, d. h

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

und wenn Sie express so konfiguriert haben, dass es seinen bodyparser ( app.use(express.bodyParser());) auch mit POST-Formulardaten verwendet. (Siehe So rufen Sie POST-Abfrageparameter ab. )

Myrne Stol
quelle
6

Anfrage und Antwort.

Um das zu verstehen req, probieren Sie es aus console.log(req);.

Generalhenry
quelle
3
Das hilft nicht; Die Ausgabe in der Konsole ist [Objekt Objekt].
JEC
Wenn Sie json wollen, müssen Sie: console.log (JSON.Stringify (req.body);
maridob