我有一个带有快速把手的nodejs应用程序,我想为像“主机”这样的东西定义变量。当前正在header.hbs文件中导入的CSS和Javascript的地址,我在特定布局中调用表单。
我创建了一个config.js文件,其中包含我想设置的多个变量,并使用以下方法将其导入app.js:
var config = require('./config.js');
但随后我就输了。例如,我想我是否可以做一些像这样的事情:
<link href="{{config.csshost}}basev1.css" rel="stylesheet" type="text/css" />
任何人都可以提供一些指针,除了每次加载模板时声明这些变量之外我都难过。
答案 0 :(得分:4)
您可以设置应用本地人:
var app = express()
app.locals = {
config: config,
templateVar: 'test'
}
编辑:
您的路线看起来像这样:
app.get('/', function(req, res) {
res.render('index', {config: config});
})
这样做,然后更新express中的 app.locals 变量,如下所示:
app.locals = {
config: config
}
然后,您可以在模板中访问所有 app.local 变量:
{{config}}
//which is really
app.locals['config']
因此,在你配置express的app.js中你会这样做:
var app = express();
app.locals.config = require('./config')
app.get('/', function(req, res) {
return res.render('index')
})
答案 1 :(得分:2)
(这应该是对上述sctskw's answer的评论,但我没有足够的声誉来做到这一点。)
不是用新对象覆盖app.locals
,而是将新属性添加到现有属性中更好,如下所示:
app.locals.config = config;
app.locals.templateVar = 'test';
原因是Express在内部使用app.locals
。覆盖它会丢失Express提供的一些有用变量。例如,我们可以使用settings.env
来检测视图模板中的当前运行环境,该模板由Express定义为app.locals.settings.env
。