Node.js 在nodejs&;快递,什么';s设置与设置之间的差异&;当地人

Node.js 在nodejs&;快递,什么';s设置与设置之间的差异&;当地人,node.js,express,Node.js,Express,从node+express开始,以下两者之间的区别是什么: app.set(key, value) 及 我已经阅读了express文档,它声明app.locals被传递到所有渲染视图,但我也能够从jade视图访问设置(使用#{settings.someKey})。 由于这两个都可以在jade模板中使用,我似乎无法找出2的区别或不同用法。区别在于,通过直接操作app.locals,您可以为模板创建“顶级”变量,而不必使用设置。前缀 app.set(key,value)与app.locals.se

从node+express开始,以下两者之间的区别是什么:

app.set(key, value)

我已经阅读了express文档,它声明app.locals被传递到所有渲染视图,但我也能够从jade视图访问设置(使用#{settings.someKey})。
由于这两个都可以在jade模板中使用,我似乎无法找出2的区别或不同用法。

区别在于,通过直接操作
app.locals
,您可以为模板创建“顶级”变量,而不必使用
设置。
前缀

app.set(key,value)
app.locals.settings[key]=value相同;前者是配置Express某些部分的首选方法(如设置
查看引擎

编辑:小演示,展示它们是如何进行相同操作的:


好的,谢谢,你的答案中有一点让人困惑,当你说“app.set(key,value)和app.locals.settings[key]=value”时,你的意思是它应该指向同一个对象吗?根据我的测试,这两个是不同的对象。我遗漏了什么吗?上面所有的都可以,但是“console.log(app.locals.foo);”(不在您的示例中)不起作用。如果我理解正确,使用app.set(k,v)在app.locals中创建一个设置对象。这是正确的假设吗?顺便说一句,谢谢你的帮助!你的假设是正确的,但我不确定我是否理解你为什么认为
app.locals.foo
会存在(因为它不是由
app.set()
设置的)
app.locals
是一个对象,
app.locals.settings
也是一个对象,但可以使用
app.set(KEY,VALUE)
以及直接使用
app.locals.settings.KEY=VALUE
(或
app.locals.settings['KEY']=VALUE
)来“填充”它。我最初认为它们是两个不同的对象,app.locals对象和app.settings对象。我没有意识到设置是局部变量中的嵌套对象。现在它有了完美的意义,谢谢你的澄清。
app.locals({key: value});
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'