Các thông số của các ứng dụng khác như thế nào


183

Trong hàm Express sau:

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

Là gì reqres? Họ đại diện cho điều gì, họ có ý nghĩa gì và họ làm gì?

Cảm ơn!


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

Câu trả lời:


270

reqlà một đối tượng chứa thông tin về yêu cầu HTTP đã đưa ra sự kiện. Để đáp lại req, bạn sử dụng resđể gửi lại phản hồi HTTP mong muốn.

Những thông số có thể được đặt tên bất cứ điều gì. Bạn có thể thay đổi mã này thành mã này nếu nó rõ ràng hơn:

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

Biên tập:

Nói rằng bạn có phương pháp này:

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

Yêu cầu sẽ là một đối tượng có các thuộc tính như thế này (chỉ nêu một vài tên):

  • request.url, sẽ là "/people.json"khi hành động cụ thể này được kích hoạt
  • request.method, sẽ có "GET"trong trường hợp này, do đó app.get()cuộc gọi.
  • Một loạt các tiêu đề HTTP request.headers, chứa các mục như request.headers.accept, mà bạn có thể sử dụng để xác định loại trình duyệt nào đã đưa ra yêu cầu, loại phản hồi nào có thể xử lý, có thể hiểu được nén HTTP hay không, v.v.
  • Một mảng các tham số chuỗi truy vấn nếu có bất kỳ, trong request.query(ví dụ /people.json?foo=barsẽ dẫn đến việc request.query.foochứa chuỗi "bar").

Để đáp ứng yêu cầu đó, bạn sử dụng đối tượng phản hồi để xây dựng phản hồi của mình. Để mở rộng trên people.jsonví dụ:

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
bạn có thể sử dụng curl để xem phản hồi hoàn chỉnh với các tiêu đề
Generalhenry

3
Bạn có thể muốn xem: en.wikipedia.org/wiki/Hypertext_Transfer_Protocol . Không phải là lén lút, đó là điều mà tất cả chúng ta, những người phát triển cho Web cần phải biết!
TK-421

7
Có, điều này thật tuyệt vời khi ở trên trang chính của trang web express.js.
Anton

expressnoob - hồi đáp là một đối tượng, giống như đối tượng yêu cầu, nhưng nó chứa các trường và phương thức liên quan đến phản hồi. Thông thường phương thức send () của phản hồi được sử dụng. send () chấp nhận một loạt các loại khác nhau cho đối số đầu tiên, trở thành thân phản hồi HTTP và đối số thứ hai là mã phản hồi HTTP.
Grantwparks

7
Nếu ai đó đang tìm kiếm chi tiết reqrescấu trúc, nó được mô tả trong tài liệu express req:: expressjs.com/en/api.html#req , res: expressjs.com/en/api.html#res
akn

25

Tôi nhận thấy một lỗi trong câu trả lời Dave Ward (có lẽ một sự thay đổi gần đây?): Các paramaters chuỗi truy vấn trong request.query, không request.params. (Xem https://stackoverflow.com/a/6913287/166530 )

request.params theo mặc định được điền với giá trị của bất kỳ "kết hợp thành phần" nào trong các tuyến, nghĩa là

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

và, nếu bạn đã cấu hình express để sử dụng bodyparser của nó ( app.use(express.bodyParser());) cũng với formdata POST'ed. (Xem Cách truy xuất tham số truy vấn POST? )


6

Yêu cầu và trả lời.

Để hiểu req, hãy thử console.log(req);.


3
Điều này không có ích; đầu ra trong bàn điều khiển là [Object Object].
JEC

Nếu bạn muốn json, bạn phải: console.log (JSON.Stringify (req.body);
maridob
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.