将全局配置变量传递给 handlebars 模板的最佳方法是什么?
What is the best way to pass global config variables to handlebars template?
我有一个带有 express-handlebars 的 nodejs 应用程序,我想为 CSS 和 Javascript 的 'host' 地址之类的东西定义变量,这些东西目前正在导入 header.hbs 我在特定布局中调用表单的文件。
我创建了一个 config.js 文件,其中包含许多我想设置的变量,并且我使用以下方法将其导入 app.js:
var config = require('./config.js');
但后来我不知道该去哪里。例如,我在想我是否可以做这样的事情:
<link href="{{config.csshost}}basev1.css" rel="stylesheet" type="text/css" />
任何人都可以提供一些指示,除了每次加载模板时都声明这些变量之外,我很难过。
您将设置应用本地化:
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')
})
(这应该是对上面 的评论,但我没有足够的声誉来这样做。)
与其用新对象覆盖 app.locals
,不如向现有对象添加新属性,如下所示:
app.locals.config = config;
app.locals.templateVar = 'test';
原因是Express内部使用了app.locals
。覆盖它会丢失 Express 提供的一些有用的变量。例如,我们可以使用 settings.env
来检测视图模板中当前的 运行 环境,Express 将其定义为 app.locals.settings.env
。
我有一个带有 express-handlebars 的 nodejs 应用程序,我想为 CSS 和 Javascript 的 'host' 地址之类的东西定义变量,这些东西目前正在导入 header.hbs 我在特定布局中调用表单的文件。
我创建了一个 config.js 文件,其中包含许多我想设置的变量,并且我使用以下方法将其导入 app.js:
var config = require('./config.js');
但后来我不知道该去哪里。例如,我在想我是否可以做这样的事情:
<link href="{{config.csshost}}basev1.css" rel="stylesheet" type="text/css" />
任何人都可以提供一些指示,除了每次加载模板时都声明这些变量之外,我很难过。
您将设置应用本地化:
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')
})
(这应该是对上面
与其用新对象覆盖 app.locals
,不如向现有对象添加新属性,如下所示:
app.locals.config = config;
app.locals.templateVar = 'test';
原因是Express内部使用了app.locals
。覆盖它会丢失 Express 提供的一些有用的变量。例如,我们可以使用 settings.env
来检测视图模板中当前的 运行 环境,Express 将其定义为 app.locals.settings.env
。