我正在学习 Express - 并且正在考虑保存配置样式数据的最佳位置。可用的选项在 app.locals 或 app.set(设置)中......所以:
app.locals({ config: {
name: 'My App',
domain: 'myapp.com',
viewPath: __dirname+'/views',
viewEngine: 'jade'
port: 3000
} });
app.set('view engine', app.locals.config.viewEngine || 'jade');
这也将允许我在我的观点中使用以下内容:
<title>#{config.name}</title> // <title>My App</title>
或者替代方法是像这样使用 app.set:
app.set('name', 'My App');
app.set('domain', 'myapp.com');
...然后在 View 中使用它:
<title>#{settings.name}</title>
我知道这两种方法都有效,但我正在努力确定哪种方法更好用。目前我倾向于使用 app.locals,带有额外的“app”命名空间,因为我相信如果使用 app.set,与 future 更新和其他模块发生冲突的可能性会更小。
最佳答案
哇,所有的答案都是错误的,所以让我试一试。尽管其他人说 使用 app.local 参数不同于使用 app.set()。观看,
app.js
app.locals.foo = 'bar';
app.set('baz', 'quz');
index.jade
block content
dl
dt app.locals.foo = 'bar';
dd \#{settings.foo} = #{settings.foo}
dd \#{foo} = #{foo}
dt app.set('baz', 'quz')
dd \#{settings.baz} = #{settings.baz}
dd \#{baz} = #{baz}
如果你运行这段代码,你会看到,
app.locals.foo = 'bar';
#{settings.foo} =
#{foo} = bar
app.set('baz', 'quz')
#{settings.baz} = quz
#{baz} =
这样做的原因是设置 app.locals
设置 View 用作其环境的对象的属性;没有条件的 View 将读取什么。相反,app.set在 app.locals.settings
上设置属性。如果你在上面使用 app.locals.settings = {}
破坏 app.locals.settings
,你可以验证这一点,这将使 #{settings.baz }
未定义。
那你用哪个?如果不是基于响应(res.set
)或全局配置(app.set
)的应用设置,使用直接写入app.locals
.
关于javascript - 在 app.locals 上设置属性和调用 app.set() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11885562/