在我的app.js文件中,我使用app.set(valName, value)
将多个配置值传递给我的路线
然后我将应用程序传递给我的路线:app.use('/', require('./routes/index')(app))
;
然后,我可以轻松地使用app.get(valName)
来检索路由中的值。
我的问题是:使用app.valName = value;
然后只需访问路线中的app.valName
就更容易了吗?
我必须使用.set
和.get
吗?或者这会违反什么?
答案 0 :(得分:4)
我是否必须使用
.set
和.get
?或者这会违反什么?
你有吗?不,不是吗?是的!
通过直接将应用程序属性设置为app
对象(例如app.valName = value;
),您可能会覆盖Express已初始化以供内部使用的属性。
您可以从Express's source code看到Express应用程序在init
函数中创建以下属性:
this._baseRoutes = {};
this.cache = {};
this.settings = {};
this.engines = {};
this.defaultConfiguration();
在defaultConfiguration
function执行后设置了更多属性。这意味着,如果您想拥有一个名为cache
,settings
或engines
的属性,仅举几例,您将踩到Express的脚趾,这可能会导致一些问题应用程序运行时出错。
您可以从source of app.set
看到应用程序设置在设置对象中排序,而不是直接在应用程序对象中排序。这是为了防止我刚才描述的内容:与内部属性名冲突。