Express işlevlerinde “res” ve “req” parametreleri nelerdir?


183

Aşağıdaki Express işlevinde:

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

Nedir reqve res? Ne anlama geliyorlar, ne anlama geliyorlar ve ne yapıyorlar?

Teşekkürler!


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

Yanıtlar:


270

reqolayı oluşturan HTTP isteği hakkında bilgi içeren bir nesnedir. Yanıt olarak req, resistenen HTTP yanıtını geri göndermek için kullanılır.

Bu parametrelere herhangi bir ad verilebilir. Daha açıksa bu kodu bu şekilde değiştirebilirsiniz:

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

Düzenle:

Bu yönteme sahip olduğunuzu varsayalım:

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

İstek, bu gibi özelliklere sahip bir nesne olacaktır (sadece birkaçını belirtmek için):

  • request.url, "/people.json"bu belirli işlem tetiklendiğinde gerçekleşecek
  • request.method, "GET"bu durumda, bu nedenle app.get()çağrı.
  • Hangi tür tarayıcıların istekte bulunduğunu, ne tür yanıtları işleyebileceğini, HTTP sıkıştırmasını anlayabildiğini veya anlayamadığını belirlemek için kullanabileceğiniz, request.headersgibi öğeler içeren bir dizi HTTP başlığı request.headers.accept.
  • Varsa, sorgu dizesi parametreleri dizisi request.query(örneğin , dizeyi içermesiyle /people.json?foo=barsonuçlanır ).request.query.foo"bar"

Bu isteğe yanıt vermek için yanıtınızı oluşturmak için yanıt nesnesini kullanırsınız. Örneği genişletmek için 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);
});

1
başlıklarıyla birlikte verilen yanıtı görmek için curl kullanabilirsiniz
generalhenry

3
Kontrol etmek isteyebilirsiniz: en.wikipedia.org/wiki/Hypertext_Transfer_Protocol . Sinsi olmamak, Web için geliştiren hepimizin bilmesi gereken bir şey!
TK-421

7
Evet, express.js web sitesinin ana sayfasında olması harikaydı.
Anton

expressnoob - yanıt, istek nesnesi gibi bir nesnedir, ancak yanıtla ilgili alanları ve yöntemleri içerir. Normalde yanıtın send () yöntemi kullanılır. send (), HTTP argümanı gövdesi haline gelen ilk argüman için farklı türde bir grup kabul eder ve ikinci argüman HTTP yanıt kodudur.
grantwparks

7
Birisi ayrıntıları arıyorsa reqve resyapısı, bu ekspres docs açıklanan: req: expressjs.com/en/api.html#req , res: expressjs.com/en/api.html#res
aşkın

25

Dave Ward'ın cevabında bir hata fark ettim (belki de son değişiklik?): Sorgu dizgisi paramatörleri request.querydeğil request.params. (Bkz. Https://stackoverflow.com/a/6913287/166530 )

request.params varsayılan olarak rotalardaki herhangi bir "bileşen eşleşmesi" değeriyle doldurulur.

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

ve express'i bodyparser ( app.use(express.bodyParser());) öğesini POST'lu form verileriyle de kullanacak şekilde yapılandırdıysanız. ( Bkz.POST sorgu parametreleri nasıl alınır? )


6

İstek ve yanıt.

Anlamak için reqdeneyin console.log(req);.


3
Bu yardımcı olmuyor; konsoldaki çıktı [object Object] 'dir.
JEC

Json istiyorsanız, şunları yapmanız gerekir: console.log (JSON.Stringify (req.body);
maridob
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.