node.js - Node + Express : How do the req and res variables have global scope without causing collisions?

标签 node.js express global-variables

似乎 reqres 变量在 Express 中具有全局范围(例如,无论函数范围如何,都可以访问这些变量)。如何在不导致并发客户端之间发生冲突的情况下实现这一目标?

最佳答案

它们没有全局作用域。

路线

路由为每个路由采用一个处理函数。该路由传递给 reqres 对象。

app.get('/my-route', myHandler);

处理程序

您的处理程序接收这些对象并使用它们。

exports.myHandler = function(req, res) {
    res.send("Hello world");
);

闭包

当您进行数据库调用(或任何其他 io 绑定(bind)调用)时,您会向其传递一个回调。 reqres 对象作为闭包存在于该回调中。

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?

关于node.js - Node + Express : How do the req and res variables have global scope without causing collisions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16902976/

相关文章:

node.js - Express js - 无法重定向

python - 是否可以使用 Pool.map() 让多个进程写入同一个字典?

javascript - require() 的顺序似乎会影响模块

javascript - 使用 Express.js v4 和 Socket.io v1 的 session

arrays - 使用 MongoDB 的复选框数据

c - 在 C 程序中,是否可以将所有全局变量重置为默认值?

Javascript 全局变量不起作用

node.js - NodeJS aes gcm 无效套件类型错误

javascript - 在 Express 中设置主页

node.js - 不使用 `next()`表达错误中间件吗?