ejs 模板变量未在页面加载和错误中定义
ejs template variable is not defined on page load and errors
我有一个提交到 Express 应用程序的表单:
app.post('/myform', function (req, res) {
var content = new registration(req.body);
content.save(function(errObj){
if(errObj){
res.render('registration',{error: errObj});
} else {
res.render('thankyou');
}
});
如果在将表单数据保存到 mongoDb 时出现任何错误,我想在表单顶部显示这些错误,因此我将错误对象传回 ejs 模板:
<% if (error) { %>
<li><%= error %></li>
<% } %>
但是当我最初加载页面时还没有错误(因为尚未提交表单)我在页面上收到错误并且未呈现表单:
error is not defined
我该如何解决这个问题?
您可以在错误 属性 中使用一个不会进入 if:
的值
res.render('registration', {error: false});
尝试通过 运行 命令再次启动服务器
$节点server.js
注:server.js为用户自定义文件。
以下代码解释了一个工作示例:
<% if (typeof error ='object' && error) { %>
<li><%= error %></li>
<% } %>
您可以通过三种方式进行检查:-
- 使用 Amit 建议的方法:
res.render('registration', {error: false});
- 检查
error
是否存在:
<% if( typeof(error) =="undefined")%>
//checks the type of variable
- 您可以通过访问
locals
对象来查看变量 error
是否存在:
<% if(locals.error) %>
我遇到了同样的问题,您可以尝试两种不同的方法。
- 将 false 传递给从 js 文件获取时出错,如下所示。
router.get('/login', function(req, res, next) {
res.render('login', { title: 'Please login', error: false });
});
- 另一种方法是在 ejs 文件中处理它,在这里您可以检查错误是否从方法调用传递过来,如下所示。
<% if (typeof error != "undefined" && error.username) { %>
<p><%= error.username.msg %></p>
<%} %>
我知道这是几年前的事了,但以防其他人遇到困难。
我通过将变量的范围更改为全局来解决了这个问题。如此简单的修复,但我花了几个小时才弄明白。
我没有在 app.post
方法中使用变量,而是将所有内容都移到了 app.get。然后,我将 res.redirect()
添加到我的 app.post
方法中,并在 js file
.
的顶部声明了我所有的变量
服务器:快速进动
<% if (typeof data != undefined) { %>
<li><%= data %></li>
<% } %>
如果您稍后要在执行某个操作后设置一些变量,那么您可能会考虑先将它们设置为 null。比方说,你想渲染一个页面,在提取一些金额后检查现金余额,然后在加载页面时 cash.ejs 你会得到这些未定义的错误,但你可以通过首先将这些变量初始化为 null 来解决这个问题像这样渲染函数:
app.get("/cash", function (req,res){
res.render ( "cash.ejs",{amount:"", charge:"", newbalance: ""});
});
我有一个提交到 Express 应用程序的表单:
app.post('/myform', function (req, res) {
var content = new registration(req.body);
content.save(function(errObj){
if(errObj){
res.render('registration',{error: errObj});
} else {
res.render('thankyou');
}
});
如果在将表单数据保存到 mongoDb 时出现任何错误,我想在表单顶部显示这些错误,因此我将错误对象传回 ejs 模板:
<% if (error) { %>
<li><%= error %></li>
<% } %>
但是当我最初加载页面时还没有错误(因为尚未提交表单)我在页面上收到错误并且未呈现表单:
error is not defined
我该如何解决这个问题?
您可以在错误 属性 中使用一个不会进入 if:
的值res.render('registration', {error: false});
尝试通过 运行 命令再次启动服务器 $节点server.js
注:server.js为用户自定义文件。
以下代码解释了一个工作示例:
<% if (typeof error ='object' && error) { %>
<li><%= error %></li>
<% } %>
您可以通过三种方式进行检查:-
- 使用 Amit 建议的方法:
res.render('registration', {error: false});
- 检查
error
是否存在:
<% if( typeof(error) =="undefined")%>
//checks the type of variable
- 您可以通过访问
locals
对象来查看变量error
是否存在:
<% if(locals.error) %>
我遇到了同样的问题,您可以尝试两种不同的方法。
- 将 false 传递给从 js 文件获取时出错,如下所示。
router.get('/login', function(req, res, next) {
res.render('login', { title: 'Please login', error: false });
});
- 另一种方法是在 ejs 文件中处理它,在这里您可以检查错误是否从方法调用传递过来,如下所示。
<% if (typeof error != "undefined" && error.username) { %>
<p><%= error.username.msg %></p>
<%} %>
我知道这是几年前的事了,但以防其他人遇到困难。
我通过将变量的范围更改为全局来解决了这个问题。如此简单的修复,但我花了几个小时才弄明白。
我没有在 app.post
方法中使用变量,而是将所有内容都移到了 app.get。然后,我将 res.redirect()
添加到我的 app.post
方法中,并在 js file
.
服务器:快速进动
<% if (typeof data != undefined) { %>
<li><%= data %></li>
<% } %>
如果您稍后要在执行某个操作后设置一些变量,那么您可能会考虑先将它们设置为 null。比方说,你想渲染一个页面,在提取一些金额后检查现金余额,然后在加载页面时 cash.ejs 你会得到这些未定义的错误,但你可以通过首先将这些变量初始化为 null 来解决这个问题像这样渲染函数:
app.get("/cash", function (req,res){
res.render ( "cash.ejs",{amount:"", charge:"", newbalance: ""});
});