Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将全局配置变量传递给Handlebar模板的最佳方式是什么?_Javascript_Node.js_Express_Handlebars.js - Fatal编程技术网

Javascript 将全局配置变量传递给Handlebar模板的最佳方式是什么?

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}

我有一个带有快速手柄的nodejs应用程序,我想为CSS和Javascript的“主机”地址之类的东西定义一个变量,这些内容当前正在导入一个header.hbs文件,我在特定布局中称之为表单

我创建了一个config.js文件,其中有许多我想设置的变量,我使用以下方法将其导入app.js:

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}}
)。请看最后一个代码块;)