Express函数中的“ res”和“ req”参数是什么?


181

在以下Express函数中:

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

什么是reqres?它们代表什么,它们是什么意思,它们是做什么的?

谢谢!


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

Answers:


267

req是一个对象,其中包含有关引发事件的HTTP请求的信息。作为对的响应req,您可以res用于发送回所需的HTTP响应。

这些参数可以命名为任何东西。您可以将代码更改为以下内容:

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

编辑:

说您有这种方法:

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

该请求将是一个具有以下属性的对象(仅举几例):

  • request.url,这将"/people.json"是触发此特定操作的时间
  • request.method"GET"在这种情况下,因此app.get()称为通话。
  • 中的HTTP标头数组request.headers,包含诸如之类的项目request.headers.accept,您可以使用它们确定哪种类型的浏览器发出请求,可以处理哪种响应,是否能够理解HTTP压缩等。
  • 查询字符串参数(如果有)的数组request.query(例如,/people.json?foo=bar将导致request.query.foo包含string "bar")。

要响应该请求,您可以使用响应对象来构建响应。扩展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
您可以使用curl来查看包含标头的响应
generalhenry 2011年

3
您可能要签出:en.wikipedia.org/wiki/Hypertext_Transfer_Protocol。不要傻笑,这是我们为Web开发的所有人都需要知道的事情!
TK-421

7
是的,这很棒,应该在express.js网站的主页上。
安东

expressnoob-响应是一个对象,就像请求对象一样,但是它包含与响应有关的字段和方法。通常,使用响应的send()方法。send()的第一个参数接受一大堆不同类型的参数,该参数成为HTTP响应正文,第二个参数为HTTP响应代码。
Grantwparks 2012年

7
如果有人正在寻找的细节reqres结构,它在快递文档描述:reqexpressjs.com/en/api.html#reqresexpressjs.com/en/api.html#res
AKN

25

我在Dave Ward的答案中发现一个错误(也许是最近的变化?):查询字符串参数位于request.query,而不是request.params。(请参阅https://stackoverflow.com/a/6913287/166530

request.params 默认情况下,使用路由中任何“组件匹配”的值填充,即

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

并且,如果您已配置express将其bodyparser(app.use(express.bodyParser());)也用于POST的formdata。(请参阅如何检索POST查询参数?


6

请求和回应。

要了解该功能req,请尝试一下console.log(req);


3
这没有帮助;控制台中的输出为[object Object]。
JEC

如果您想要json,则必须执行以下操作:console.log(JSON.Stringify(req.body);
maridob
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.