2017-09-02 60 views
0

目前我正在使用node,express进行完整的堆栈javascript开发。我的问题是如何在app.js/server上创建一个变量,并且可以通过它的所有控制器访问,而无需进一步声明。 (类似于Java中的静态变量,你不需要做任何事情,只需使用像class.variable那样的变量)如何使变量可以通过所有控制器访问?

如果不可能,那么解决这个问题的方法是什么?

+0

只需将其导入到您定义控制器的每个文件中。 – ideaboxer

+1

如果所有控制器都可以访问'app'对象,则可以使用['app.get()'](http://expressjs.com/en/4x/api.html#app.get)和['app .set()'](http://expressjs.com/en/4x/api.html#app.set),或者你可以直接将属性添加到'app'对象。如果您向我们展示您的控制器的示例代码,我们可能会提供更多的想法。 – jfriend00

+0

如果您正在讨论配置变量,那么创建配置文件并通过将变量导入到任意位置来使用它是标准做法。 –

回答

-1

您可以将此变量添加到global范围,并从任何JavaScript文件访问它。

//set variable 
global.myVar = 'Something'; 

//get variable 
console.log(global.myVar); 
+0

通常,您希望避免在node.js服务器开发中使用全局变量,因为它会因模块化和代码重用而混乱,并为命名冲突创造机会。节点开发鼓励事物与导入和导出共享或通过模块构造器共享,而不是通过全局。 – jfriend00

+0

全球应该明智地使用,因为它可以很容易地创建一个烂摊子。请参阅此答案中的评论https://stackoverflow.com/a/10987543/3439731 – RaghavGarg

0

我不熟悉express,但我认为在JS中声明静态成员的常用方法可能有所帮助。

function Class1(dyn_member){ 
    this.dyn_member=dyn_member; 
} 
Object.defineProperty(Class1.prototype,'static_member',{ 
    get:function(){return Class1.static_member}, 
    set:function(value){Class1.static_member=value;} 
}); 

a=new Class1('dyn1'); 
b=new Class1('dyn2'); 
console.log(a.static_member); 
a.static_member='new static'; 
console.log(b.static_member); 
0

您可以在配置文件中定义这样的变量。 另外好的一点是将配置文件拆分成不同的部署环境。

很好的发现包将是config

相关问题