【发布时间】:2016-06-03 14:14:18
【问题描述】:
我想将在 javascript 文件中声明的变量用于 ejs 文件。
javascript:
var express = require('express');
var app = express();
var myVar = 1;
在 ejs 文件中,我想在几个 if 语句中使用该变量,我必须再次声明它才能使用它。
ejs 文件:
var myVar = 1;
if ( my Var ) ....
我怎样才能避免这种情况?或者有没有办法创建一个可以从 javascript 和 ejs 访问的配置文件?
我也试过用:
app.locals.myVar = 1
但在 ejs 文件中未定义。
------- 更新 --------------
在我正在使用的代码中:
app.get('/', function (req, res) {
res.render('index', { user : req.user, message: [] });
});
使用 app.locals 后:
app.get('/', function (req, res) {
res.render('index', { user : req.user, message: [] });
res.render('user_info.ejs');
});
即使代码运行良好,我也收到了:
ReferenceError: ....user_info.ejs:18
>> 18| height:60px;
user is not defined
at eval (eval at <anonymous> (...node_modules/ejs/lib/ejs.js:464:12), <anonymous>:20:12)
at returnedFn (...node_modules/ejs/lib/ejs.js:493:17)
at View.exports.renderFile [as engine] (.../node_modules/ejs/lib/ejs.js:350:31)
.....
这没有任何意义,因为正如我所说,代码运行良好。如果我在不添加第二个 res.render('user_info.ejs) 的情况下运行它,我不会收到任何错误。
那么,我可以有两个 res.render 语句吗?
【问题讨论】:
-
app.locals.myVar应该可以工作,前提是您将其设置在正确的位置并在模板中正确使用它。您可能应该发布更多代码。 -
JS 不会在文件之间“传递”变量。相反,所有文件都在全局上下文中加载和运行(在浏览器中它是窗口)。
-
@HiteshKumar 您将如何从服务器端将其添加到
window对象?这不是 EJS 模板的工作方式。 -
在节点中,您实际上有一个名为“全局”的变量,而不是窗口,但与您不会将数据附加到客户端的“窗口”对象的方式大致相同,您应该'不要将数据附加到服务器端的“全局”对象。
-
@George 在下面发布了一个可持续的解决方案——没有全局变量。
标签: javascript node.js express ejs