Javascript 将全局配置变量传递给Handlebar模板的最佳方式是什么?
我有一个带有快速手柄的nodejs应用程序,我想为CSS和Javascript的“主机”地址之类的东西定义一个变量,这些内容当前正在导入一个header.hbs文件,我在特定布局中称之为表单 我创建了一个config.js文件,其中有许多我想设置的变量,我使用以下方法将其导入app.js:Javascript 将全局配置变量传递给Handlebar模板的最佳方式是什么?,javascript,node.js,express,handlebars.js,Javascript,Node.js,Express,Handlebars.js,我有一个带有快速手柄的nodejs应用程序,我想为CSS和Javascript的“主机”地址之类的东西定义一个变量,这些内容当前正在导入一个header.hbs文件,我在特定布局中称之为表单 我创建了一个config.js文件,其中有许多我想设置的变量,我使用以下方法将其导入app.js: var config = require('./config.js'); 但是我不知道该去哪里。例如,我在想,如果我能做一些像这样的事情: <link href="{{config.csshost}
var config = require('./config.js');
但是我不知道该去哪里。例如,我在想,如果我能做一些像这样的事情:
<link href="{{config.csshost}}basev1.css" rel="stylesheet" type="text/css" />
app.get('/', function(req, res) {
res.render('index', {config: config});
})
app.locals = {
config: config
}
app.locals.config = config;
app.locals.templateVar = 'test';
除了在每次加载模板时声明这些变量之外,还有谁能提供一些指针吗
var app = express()
app.locals = {
config: config,
templateVar: 'test'
}
编辑:
您的路线将如下所示:
<link href="{{config.csshost}}basev1.css" rel="stylesheet" type="text/css" />
app.get('/', function(req, res) {
res.render('index', {config: config});
})
app.locals = {
config: config
}
app.locals.config = config;
app.locals.templateVar = 'test';
这样做的目的是更新express中的app.locals变量,如下所示:
<link href="{{config.csshost}}basev1.css" rel="stylesheet" type="text/css" />
app.get('/', function(req, res) {
res.render('index', {config: config});
})
app.locals = {
config: config
}
app.locals.config = config;
app.locals.templateVar = 'test';
所有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')
})
(这应该是对上面的评论,但我没有足够的声誉这么做。)
与其用新对象覆盖app.locals
,不如向现有对象添加新属性,如下所示:
<link href="{{config.csshost}}basev1.css" rel="stylesheet" type="text/css" />
app.get('/', function(req, res) {
res.render('index', {config: config});
})
app.locals = {
config: config
}
app.locals.config = config;
app.locals.templateVar = 'test';
原因是Express在内部使用
app.locals
。覆盖它将丢失Express提供的一些有用变量。例如,我们可以使用settings.env
在视图模板中检测当前运行的环境,该模板由Express定义为app.locals.settings.env
。谢谢,但我不确定如何解释上述内容?你能解释一下这是做什么的,以及我如何将这些变量注入到布局中吗?这就是你所要做的。呈现模板并传递变量时,只需更新app.locals,然后将其传递给模板作用域。这非常有效。然而,我有点困惑。因此,只需使用app.locals.config=require('./config')
就可以访问我的把手模板中的配置对象(通过{{config.property}}
)。请看最后一个代码块;)