在Express中使用app.set vs app.value

时间:2014-05-19 18:10:44

标签: node.js express

在我的app.js文件中,我使用app.set(valName, value)将多个配置值传递给我的路线 然后我将应用程序传递给我的路线:app.use('/', require('./routes/index')(app));
然后,我可以轻松地使用app.get(valName)来检索路由中的值。

我的问题是:使用app.valName = value;然后只需访问路线中的app.valName就更容易了吗?
我必须使用.set.get吗?或者这会违反什么?

1 个答案:

答案 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执行后设置了更多属性。这意味着,如果您想拥有一个名为cachesettingsengines的属性,仅举几例,您将踩到Express的脚趾,这可能会导致一些问题应用程序运行时出错。

您可以从source of app.set看到应用程序设置在设置对象中排序,而不是直接在应用程序对象中排序。这是为了防止我刚才描述的内容:与内部属性名冲突。