Jakie są parametry „res” i „req” w funkcjach Express?

183

W następującej funkcji Express:

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

Jakie są reqi res? Co oznaczają, co mają na myśli i co robią?

Dzięki!

expressnoob
źródło
1
req== "request"// res=="response"
nilon

Odpowiedzi:

270

reqto obiekt zawierający informacje o żądaniu HTTP, które wywołało zdarzenie. W odpowiedzi requżyjesz resdo odesłania żądanej odpowiedzi HTTP.

Te parametry można nazwać dowolnymi. Możesz zmienić ten kod na ten, jeśli jest bardziej przejrzysty:

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

Edytować:

Powiedz, że masz tę metodę:

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

Żądanie będzie obiektem o takich właściwościach (żeby wymienić tylko kilka):

  • request.url, która nastąpi "/people.json"po uruchomieniu tej konkretnej akcji
  • request.method, który będzie "GET"w tym przypadku, stąd app.get()połączenie.
  • Tablica nagłówków HTTP request.headers, zawierająca elementy request.headers.accept, których można użyć, aby określić, jakiego rodzaju przeglądarka wysłała żądanie, jakiego rodzaju odpowiedzi może obsłużyć, czy jest w stanie zrozumieć kompresję HTTP itp.
  • Tablica parametrów ciągu zapytania, jeśli takie istnieją, request.query(np. /people.json?foo=barSpowoduje request.query.foozawarcie ciągu "bar").

Aby odpowiedzieć na to żądanie, użyj obiektu odpowiedzi do zbudowania odpowiedzi. Aby rozwinąć na people.jsonprzykładzie:

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
źródło
1
możesz użyć curl, aby zobaczyć odpowiedź z nagłówkami
generalhenry
3
Możesz spróbować : en.wikipedia.org/wiki/Hypertext_Transfer_Protocol . Nie będąc wrednym, wszyscy o tym, którzy rozwijamy się w Internecie, powinni wiedzieć!
TK-421,
7
Tak, to było świetne powinno być na stronie głównej witryny express.js.
Anton
expressnoob - odpowiedź jest obiektem, podobnie jak obiekt żądania, ale zawiera pola i metody odnoszące się do odpowiedzi. Zwykle stosowana jest metoda send () odpowiedzi. send () akceptuje całą masę różnych typów dla pierwszego argumentu, który staje się treścią odpowiedzi HTTP, a drugim argumentem jest kod odpowiedzi HTTP.
grantwparks
7
Jeśli ktoś szuka szczegóły reqi resstrukturę, jest to opisane w Dokumentach ekspresowych: req: expressjs.com/en/api.html#req , res: expressjs.com/en/api.html#res
AKN
25

Zauważyłem jeden błąd w odpowiedzi Dave'a Warda (być może ostatnią zmianę?): Parametry łańcucha zapytania są request.query, nie request.params. (Zobacz https://stackoverflow.com/a/6913287/166530 )

request.params domyślnie jest wypełniona wartością dowolnego „dopasowania elementów” w trasach, tj

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

a jeśli skonfigurowałeś express do korzystania z jego bodyparser ( app.use(express.bodyParser());) również z formdata POST. (Zobacz Jak pobrać parametry zapytania POST? )

Myrne Stol
źródło
6

Żądanie i odpowiedź.

Aby to zrozumieć req, wypróbuj console.log(req);.

ogólne
źródło
3
To nie pomaga; wyjście w konsoli to [obiekt Obiekt].
JEC
Jeśli chcesz mieć JSON, musisz: console.log (JSON.Stringify (req.body);
maridob