在 app.locals 上设置属性和调用 app.set() 有什么区别?
What is the difference between setting a property on app.locals and calling app.set()?
我正在学习 Express - 并考虑保存配置样式数据的最佳位置。可用的选项是在 app.locals 或 app.set (settings)...所以:
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');
。然后在视图中使用它:
<title>#{settings.name}</title>
我知道这两种方法都有效,但我正在努力确定哪种方法更好。目前,我倾向于使用app.locals,带有额外的"app"命名空间,因为我相信如果使用app.set,与未来更新和其他模块发生冲突的可能性会更小。
所有的答案都是错误的,所以让我试一试。尽管其他人说 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
设置视图用作其环境的对象的属性;视图将不加限定地从中读取的内容。相反,app.set 在 app.locals.settings
上设置属性。如果您使用app.locals.settings = {}
在上面app.locals.settings
,则可以验证这一点,这将使#{settings.baz}
未定义。
那么你使用哪个?如果不是基于响应 (res.set
) 或全局配置 (app.set
的应用设置,请使用直接写入 app.locals
。
app.locals
的所有属性在模板中都可用。使用 app.set
将属性分配给 app.locals.settings
,该属性用于全局应用程序设置,并由挂载的应用程序继承。例如:
var app1 = express(),
app2 = express();
app1.set('inheritable', 'foo');
app1.locals.notInheritable = 'bar';
app1.use('/mount', app2);
app2.get('inheritable') === 'foo'; // true
app2.locals.notInheritable === 'bar'; // false
因此,这实际上是一个偏好问题,以及您是否正在安装应用程序。
快速 api 参考 说:
默认情况下,Express 仅公开单个应用级局部变量, 设置。
无论哪种方式都可以:
app.locals.title = 'My App';
app.set('title', 'My App');
// use settings.title in a view
很多人确实使用本地人而不是app.set,所以我的建议是使用它。
- 全局变量和全局对象的属性之间有什么区别吗
- JavaScript中的函数和对象之间没有区别吗?
- 在ember/handlers中使用value和valueBinding有什么区别
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- 在Nodejs中Express输入DEBUG=app时权限被拒绝/bin
- javascript函数的:和=之间的区别
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 函数中this和var之间的区别
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- “util.inherits”和在NodeJS中扩展原型之间的区别
- Math.min()和Math.max()之间有什么区别?在Javascript中
- angularjs中的ng网格和ui网格有什么区别
- 使用大括号和不使用bracs调用函数的区别
- webpack开发模式和生产构建模式之间有什么区别
- 使用Rhino和ASE执行Javascript的区别
- 在 app.locals 上设置属性和调用 app.set() 有什么区别?
- app.post 和 app.use 在节点表达中有什么区别
- AngularJS和SignalR的区别在于定义app模块
- APP ID和API key有什么区别?