将全局配置变量传递给 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