目前我正在使用node,express進行完整的堆棧javascript開發。我的問題是如何在app.js/server上創建一個變量,並且可以通過它的所有控制器訪問,而無需進一步聲明。 (類似於Java中的靜態變量,你不需要做任何事情,只需使用像class.variable那樣的變量)如何使變量可以通過所有控制器訪問?
如果不可能,那麼解決這個問題的方法是什麼?
目前我正在使用node,express進行完整的堆棧javascript開發。我的問題是如何在app.js/server上創建一個變量,並且可以通過它的所有控制器訪問,而無需進一步聲明。 (類似於Java中的靜態變量,你不需要做任何事情,只需使用像class.variable那樣的變量)如何使變量可以通過所有控制器訪問?
如果不可能,那麼解決這個問題的方法是什麼?
您可以將此變量添加到global
範圍,並從任何JavaScript文件訪問它。
//set variable
global.myVar = 'Something';
//get variable
console.log(global.myVar);
通常,您希望避免在node.js服務器開發中使用全局變量,因爲它會因模塊化和代碼重用而混亂,併爲命名衝突創造機會。節點開發鼓勵事物與導入和導出共享或通過模塊構造器共享,而不是通過全局。 – jfriend00
全球應該明智地使用,因爲它可以很容易地創建一個爛攤子。請參閱此答案中的評論https://stackoverflow.com/a/10987543/3439731 – RaghavGarg
我不熟悉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);
您可以在配置文件中定義這樣的變量。 另外好的一點是將配置文件拆分成不同的部署環境。
很好的發現包將是config。
只需將其導入到您定義控制器的每個文件中。 – ideaboxer
如果所有控制器都可以訪問'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
如果您正在討論配置變量,那麼創建配置文件並通過將變量導入到任意位置來使用它是標準做法。 –