Node.JS Express应用程序有一个全局对象,充当“包”,您可以将数据/对象附加到应用程序中的所有代码可用的数据/对象:
// Create an appRoot global variable that tells the code base what the root directory of this app is.
global.appRoot = path.resolve(__dirname);
我主要担心的是,我需要确保全局对象只是全局的,因为在当前客户端请求的上下文中操作的所有代码都有另一个访问该对象中的数据,并且数据不是请求之间或之间可用。否则,我可能会泄漏必须对特定请求或用户保密的数据。
为了确保我清楚,我们举个例子:
换句话说,是否每个请求都重新初始化全局对象,或者只要服务器正常运行,它就会持续存在,对于到达服务器的所有请求都可用,并且没有任何“技巧”可能导致不必要的数据泄漏服务器请求?
node.js global
对象对整个node.js进程是全局的。它与Express没有任何关系。但是,Express确实有一些具有不同范围的对象,您可以使用这些对象在客户端请求中保留数据,或跨所有客户端请求保留事件。来自Express文档:
包含作用于请求的响应局部变量的对象,因此仅对在请求/响应周期(如果有)期间呈现的视图可用。
app.use(function(req, res, next){
res.locals.user = req.user;
res.locals.authenticated = ! req.user.anonymous;
next();
});
app.locals对象的属性是应用程序中的局部变量...一旦设置,app.locals属性的值在应用程序的整个生命周期中都会持续存在,而res.locals属性仅在生命周期内有效。请求。
Express app.locals
对象类似于node.js全局对象,只要它在多个请求中保存在内存中即可。但是,它是Express实例的本地,如果该实例被删除,app.locals对象也将被删除。 node.js global
对象的不同之处在于它将在整个node.js进程的生命周期中保持不变。
是的,全局变量将持续用于任何请求。除非您旋转节点应用程序的另一个实例。如果你正在寻找一些认证/会话工具,那里有很多,比如passport或cookie-parser