我一直在编码后端api,但我并没有真正了解其出价对代码的表达方式。我知道请求和响应对象提供了什么,我只是不明白它们是如何实现的。
例如,以下简化代码:
exports.getBlurts = function() {
return function(req, res) {
// build query…
qry.exec(function(err, results) {
res.json(results);
}
});
}
}
然后我要在一条路线中致电:
app.get('/getblurts/, middleware.requireUser, routes.api.blurtapi.getBlurts());
我知道该功能是在路由请求时调用的。不过,这对我来说是非常抽象的,我不知道何时,何地或与注入的需求参数有关。
例如。我使用的CMS通过添加用户属性来修改请求对象,该属性随后可在所有通过ajax或其他方式发出的请求中全局可用,从而始终可轻松确定用户是否已登录。
req和res对象是否只是通过express预煮的,但是可以根据需要修改它们的自由度?他们何时真正“建造”
答案 0 :(得分:1)
快递实际上是使用节点的默认http模块并将快递应用程序作为回调传递给http.createServer
函数。此时,即从节点本身为每个传入连接填充请求和响应对象。有关节点的http模块和要求/要求的更多详细信息,请参见the nodeJS documentation。
您可能想签出express' source code,该文件显示了快速应用程序如何作为回调传递给http.createServer
。
https://github.com/expressjs/express/blob/master/lib/request.js和https://github.com/expressjs/express/blob/master/lib/response.js显示了如何通过表达特定功能扩展节点的请求/响应。