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



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

我的问题是:只使用app.valName = value;,然后在路由中访问app.valName不是更容易吗?
我必须使用.set.get吗?还是说这违反了什么?

我必须使用.set.get吗?还是说这违反了什么?

吗?不。你应该吗?是的!

通过将应用程序属性直接设置为app对象(例如app.valName = value;),您可能会覆盖Express为内部使用初始化的属性。

您可以从Express的源代码中看到,Express应用程序在其init函数中创建了以下属性:

this._baseRoutes = {};
this.cache = {};
this.settings = {};
this.engines = {};
this.defaultConfiguration();

并且在defaultConfiguration函数执行之后设置了更多的属性。这意味着,如果您想拥有一个名为cachesettingsengines的属性,仅举几例,您将会踩到Express的脚趾,并且可能会在应用程序运行时导致一些错误。

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

最新更新