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

What are "res" and "req" parameters in Express functions?

提问人:expressnoob 提问时间:1/15/2011 最后编辑:Communityexpressnoob 更新时间:5/28/2019 访问量:249738

问:

在以下 Express 函数中:

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

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

谢谢!

节点.js Express

评论

2赞 nilon 1/24/2020
req == "request" // res == "response"
2赞 Wasit Shafi 12/10/2021
我还想补充一下我的意见,我们应该更喜欢使用参数名称作为请求/响应而不是 req/res,因为一旦我们的代码库增加,只有字符差异,这可能会成为错误的原因。谢谢。

答:

7赞 generalhenry 1/15/2011 #1

请求和响应。

要了解,请尝试一下。reqconsole.log(req);

评论

3赞 J.E.C. 2/14/2020
这无济于事;控制台中的输出为 [object Object]。
1赞 maridob 4/19/2020
如果你想要json,你必须:console.log(JSON.字符串化(req.body);
321赞 Dave Ward 1/15/2011 #2

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

这些参数可以命名为任何名称。如果更清楚,您可以将该代码更改为以下内容:

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 标头数组,其中包含类似 的项,您可以使用这些项来确定哪种浏览器发出请求、它可以处理哪种响应、它是否能够理解 HTTP 压缩等。request.headersrequest.headers.accept
  • 查询字符串参数数组(如果有),在(例如 将导致包含字符串 )。request.query/people.json?foo=barrequest.query.foo"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赞 generalhenry 1/15/2011
您可以使用 curl 查看带有标头的完整响应
4赞 TK-421 1/16/2011
您可能想签出: en.wikipedia.org/wiki/Hypertext_Transfer_Protocol.不要尖酸刻薄,这是我们所有为 Web 开发的人都需要知道的事情!
7赞 Anton 2/26/2011
是的,这很棒,应该在express.js网站的主页上。
0赞 grantwparks 4/26/2012
ExpressNoob - 响应是一个对象,就像请求对象一样,但它包含与响应相关的字段和方法。通常使用响应的 send() 方法。send() 接受一大堆不同类型的第一个参数,该参数成为 HTTP 响应正文,第二个参数是 HTTP 响应代码。
7赞 akn 1/16/2016
如果有人正在寻找细节和结构,可以在 express docs 中描述: :expressjs.com/en/api.html#req, : expressjs.com/en/api.html#resreqresreqres
26赞 Myrne Stol 2/3/2012 #3

我注意到戴夫·沃德(Dave Ward)的回答中有一个错误(也许是最近的变化? 查询字符串参数位于 中,而不是 中。(见 https://stackoverflow.com/a/6913287/166530request.queryrequest.params )

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

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

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