Was sind „res“ und „req“ Parameter in Express-Funktionen?
Frage
In der folgenden Express-Funktion:
app.get('/user/:id', function(req, res){
res.send('user' + req.params.id);
});
Was sind req
und res
? Was stehen sie für, was bedeuten sie, und was tun sie?
Danke!
Lösung
req
ist ein Objekt, das Informationen über die HTTP-Anforderung, die das Ereignis ausgelöst hat. Als Reaktion auf req
verwenden Sie res
die gewünschte HTTP-Antwort zurück zu senden.
Diese Parameter können dem Namen etwas werden. Man könnte diesen Code auf diese ändern, wenn es klar ist:
app.get('/user/:id', function(request, response){
response.send('user ' + request.params.id);
});
Edit:
Angenommen, Sie haben diese Methode:
app.get('/people.json', function(request, response) { });
Die Anfrage wird ein Objekt mit Eigenschaften wie diese (um nur einige zu nennen) sein:
-
request.url
, die"/people.json"
sein wird, wenn diese bestimmte Aktion ausgelöst wird, -
request.method
, die"GET"
in diesem Fall sein wird, daher derapp.get()
Anruf. - Eine Reihe von HTTP-Headern in
request.headers
, Elemente wierequest.headers.accept
enthält, die Sie Art von Browser verwenden können, um festzustellen, was den Antrag gestellt hat, was für Antworten kann damit umgehen, auch wenn es in der Lage HTTP-Komprimierung zu verstehen, etc. - Ein Array von Abfragezeichenfolge Parameter, ob es irgendwelche, in
request.query
(z.B./people.json?foo=bar
inrequest.query.foo
führen würde die Zeichenfolge"bar"
enthält).
Als Antwort auf diese Anforderung, verwenden Sie das Antwortobjekt Ihre Antwort zu bauen. Zur Erweiterung auf dem people.json
Beispiel:
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);
});
Andere Tipps
bemerkte ich einen Fehler in Dave Wird Antwort (vielleicht eine kürzliche Änderung?):
Die Query-String-Paramater sind in request.query
, nicht request.params
. (Siehe https://stackoverflow.com/a/6913287/166530 )
request.params
ist standardmäßig mit dem Wert des „-Komponente matches“ in Routen gefüllt, d.
app.get('/user/:id', function(request, response){
response.send('user ' + request.params.id);
});
und, wenn Sie Express konfigurieren seinen bodyparser zu verwenden (app.use(express.bodyParser());
) auch mit POST'ed Formulardaten. (Siehe Wie POST Abfrageparameter abzurufen? )
Anfrage und Antwort.
Um die req
zu verstehen, ausprobieren console.log(req);
.