似乎req
和res
变量在Express中具有全局范围(例如,无论函数范围如何,这些变量都是可访问的)。如何在不造成同时客户端冲突的情况下实现这一目标?
答案 0 :(得分:6)
他们没有全球范围。
该路线为每条路线采用处理函数。该路由将传递req
和res
个对象。
app.get('/my-route', myHandler);
您的处理程序接收这些对象并使用它们。
exports.myHandler = function(req, res) {
res.send("Hello world");
);
当您进行数据库调用(或任何其他io绑定调用)时,您将向其传递回调。 req
和res
对象作为闭包存在于该回调中。
exports.myHandler = function(req, res) {
var weekday = req.query.weekday || "today";
db.getWeather(weekday, function(err, result) {
// `res` here is a closure
if(err) { res.send(500,"Server Error"); return; }
res.send(result);
});
};
有关闭包的更多信息:How do JavaScript closures work?