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) %>

我遇到了同样的问题,您可以尝试两种不同的方法。

  1. false 传递给从 js 文件获取时出错,如下所示。
router.get('/login', function(req, res, next) {
    res.render('login', { title: 'Please login',  error: false });
});
  1. 另一种方法是在 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: ""});
});