开始学习node + express,以下内容有何区别:
app.set(key, value)
并且
app.locals({key: value});
我已经阅读了express文档,它指出app.locals会传递给所有渲染的视图,但我也能够在jade视图中访问设置(使用#{settings.someKey})。 既然两者都可以在jade模板中使用,我似乎无法弄清楚两者的区别或不同用法。
app.locals
可以为您的模板创建“顶级”变量,而不必使用settings.
前缀。
app.set(key, value)
与app.locals.settings[key] = value
相同;前者是配置Express某些部分(如设置view engine
)的首选方式。
编辑:小演示以展示它们如何执行相同操作:var app = require('express')();
app.set('foo', 'bar');
console.log('app.get("foo"):', app.get('foo')); // 'bar'
console.log('app.locals.settings.foo:', app.locals.settings.foo); // 'bar'
app.locals.settings['foo'] = 'another bar';
console.log('2nd app.get("foo"):', app.get('foo')); // 'another bar'
app.locals.foo
会存在(因为它没有被app.set()
设置);app.locals
是一个对象,app.locals.settings
也是一个对象,但你可以使用app.set(KEY, VALUE)
来给它“填充”,同时也可以直接使用app.locals.settings.KEY = VALUE
(或app.locals.settings['KEY'] = VALUE
)。 - robertklep