javascript - 在 app.locals 上设置属性和调用 app.set() 有什么区别?

标签 javascript node.js express

我正在学习 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.setapp.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/

相关文章:

javascript - 如何使用 javascript 正确隐藏 XSL 处理的 XML 元素列表

javascript 和 silverlight 混淆!

javascript - 将字符串转换为对象时获取语法错误意外标记非法

node.js - 避免在 Express.js 中记录图像

node.js - Storm 路径用户信息

css - 静态 css 不显示在 express jade 中

node.js - 在 Node.js 中存储敏感凭据的最佳方式是什么?

javascript - 带有 angularjs 模板的 Visjs 时间线

node.js - `sass-loader` 需要 `node-sass` >=4。请安装兼容版本

javascript - 切换复选框时如何获取选中的复选框数量