Javascript 在express/node中使用全局变量

Javascript 在express/node中使用全局变量,javascript,node.js,express,global-variables,scope,Javascript,Node.js,Express,Global Variables,Scope,为了找到解决方案,我找到了4个解决方案,但我想知道哪一个更好/最佳实践。为什么!:P 一,。使用req.app.get 二,。使用与上述类似的req.app.settings 三,。正在导出app对象,以便我可以访问app.get而无需req对象 四,。使用全局变量。也许是个坏主意,但是。。。设置不是一件全球性的事情吗?我可以避免重复使用它,这样就不会出现范围问题 简要意见: 一,。使用req.app.get 这里,我们为全局属性定义访问器方法getter/setter。因此,它的语法正确,很容

为了找到解决方案,我找到了4个解决方案,但我想知道哪一个更好/最佳实践。为什么!:P

一,。使用req.app.get

二,。使用与上述类似的req.app.settings

三,。正在导出app对象,以便我可以访问app.get而无需req对象

四,。使用全局变量。也许是个坏主意,但是。。。设置不是一件全球性的事情吗?我可以避免重复使用它,这样就不会出现范围问题

简要意见:

一,。使用req.app.get

这里,我们为全局属性定义访问器方法getter/setter。因此,它的语法正确,很容易理解

二,。使用与上述类似的req.app.settings

这里,我们定义的是setter,而不是使用getter来访问值。依我看,这不是个好办法。而且,它也很难理解

console.log(req.app.settings.settings);
三,。正在导出app对象,以便我可以访问app.get而无需req对象

为什么,如果可以访问文件,则需要导入文件。如果您对app modulelike有很高的依赖性,并且需要大量全局设置,这可能很有用,这通常是构建应用程序时的情况

四,。使用全局变量。也许是个坏主意,但是。。。设置不是一件全球性的事情吗?我可以避免重复使用它,这样就不会出现范围问题 这不是一个好方法,因为在这种情况下代码是不可维护的


依我看,优先级是:1>3>2>4。

如果我给它打分,1,2,3,4。我也喜欢1,但你需要一个req对象。假设您需要在路由中使用paginate.js。在路由中有req,但在paginate.js中没有。那么您结束了对require'paginate'req的操作?听起来很糟糕……我就是这么说的。这取决于你的要求。正如我提到的,若你们有应用程序模块的依赖项,你们可以使用3。
// app.js

app.set('settings', { domain: 'http://www.example.org' });

// other file

console.log(req.app.settings.settings);
// app.js

app.set('settings', { domain: 'http://www.example.org' });
module.exports = app;

// other file

var app = require('../app');
console.log(app.get('settings'));
// app.js

settings = { domain: 'http://www.example.org' };

// other file

console.log(settings);
console.log(req.app.settings.settings);