Expressfunction中的“res”和“req”参数是什么?
在以下Expressfunction中:
app.get('/user/:id', function(req, res){ res.send('user ' + req.params.id); });
什么是req
和res
? 他们代表什么,他们是什么意思,他们做什么?
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()
调用。 -
request.headers
一个HTTP头部数组,包含request.headers
的项目,您可以使用这些项目来确定请求的浏览器types,可以处理的响应types,是否能够理解HTTP压缩等等 - 在
request.params
(如/people.json?foo=bar
会导致包含string"bar"
request.params.foo
中有任何查询string参数的数组。
为了响应这个请求,你使用响应对象来构build你的响应。 展开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 would probably come 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的答案中有一个错误(也许是最近的一个变化?):查询string参数在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); });
而且,如果你已经configuration了express来使用它的bodyparser( app.use(express.bodyParser());
)也可以使用POST的formdata。 (请参阅如何检索POST查询参数? )
请求和响应。
要了解req,请试用console.log(req);
req
正在请求服务器。 res
正在将响应发回给用户。