Apa itu parameter "res" dan "req" dalam fungsi Express?

183

Dalam fungsi Express berikut:

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

Apa reqdan res? Apa yang mereka perjuangkan, apa artinya, dan apa yang mereka lakukan?

Terima kasih!

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

Jawaban:

270

reqadalah objek yang berisi informasi tentang permintaan HTTP yang mengangkat peristiwa tersebut. Sebagai tanggapan req, Anda gunakan resuntuk mengirim kembali respons HTTP yang diinginkan.

Parameter itu bisa dinamai apa saja. Anda dapat mengubah kode itu menjadi ini jika lebih jelas:

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

Edit:

Katakanlah Anda memiliki metode ini:

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

Permintaan akan menjadi objek dengan properti seperti ini (hanya untuk beberapa nama):

  • request.url, yang akan terjadi "/people.json"ketika tindakan khusus ini dipicu
  • request.method, Yang akan "GET"dalam hal ini, maka app.get()panggilan itu.
  • Array header HTTP di request.headers, berisi item seperti request.headers.accept, yang dapat Anda gunakan untuk menentukan jenis browser apa yang membuat permintaan, jenis respons apa yang dapat ditangani, apakah bisa memahami kompresi HTTP atau tidak, dll.
  • Array parameter string kueri jika ada, dalam request.query(misalnya /people.json?foo=barakan menghasilkan request.query.foostring "bar").

Untuk menanggapi permintaan itu, Anda menggunakan objek respons untuk membangun respons Anda. Untuk memperluas people.jsoncontoh:

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
sumber
1
Anda dapat menggunakan curl untuk melihat respons lengkap dengan tajuk
generalhenry
3
Anda mungkin ingin memeriksa: en.wikipedia.org/wiki/Hypertext_Transfer_Protocol . Tidak bersikap angkuh, itu sesuatu yang harus kita ketahui tentang semua yang dikembangkan oleh Web!
TK-421
7
Ya ini hebat harus di halaman utama situs web express.js.
Anton
expressnoob - respons adalah objek, sama seperti objek permintaan, tetapi berisi bidang dan metode yang berkaitan dengan respons. Biasanya metode send () respons digunakan. send () menerima sejumlah besar tipe berbeda untuk argumen pertama, yang menjadi badan respons HTTP, dan argumen kedua adalah kode respons HTTP.
Grantwparks
7
Jika seseorang mencari rincian reqdan resstruktur, yang dijelaskan dalam dokumen ekspres: req: expressjs.com/en/api.html#req , res: expressjs.com/en/api.html#res
akn
25

Saya melihat satu kesalahan dalam jawaban Dave Ward (mungkin perubahan baru-baru ini?): Paramaters string kueri ada di request.query, bukan request.params. (Lihat https://stackoverflow.com/a/6913287/166530 )

request.params secara default diisi dengan nilai "kecocokan komponen" dalam rute, yaitu

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

dan, jika Anda telah mengonfigurasi express untuk menggunakan bodyparser ( app.use(express.bodyParser());) juga dengan formdata POST'ed. (Lihat Bagaimana cara mengambil parameter permintaan POST? )

Myrne Stol
sumber
6

Permintaan dan tanggapan.

Untuk memahaminya req, cobalah console.log(req);.

generalhenry
sumber
3
Ini tidak membantu; output di konsol adalah [Objek objek].
JEC
Jika Anda ingin json, Anda harus: console.log (JSON.Stringify (req.body);
maridob