【问题标题】:ejs template variable is not defined on page load and errorsejs 模板变量未在页面加载和错误上定义
【发布时间】:2015-10-24 22:06:50
【问题描述】:

我有一个提交到快递应用程序的表单:

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

我怎样才能解决这个问题?

【问题讨论】:

  • 你为什么编辑你的问题?您删除了相关部分
  • 第一次用get方法打开页面,报错也是未定义

标签: node.js express ejs


【解决方案1】:

您可以通过三种方式进行检查:-

  • 使用 Amit 建议的方法:

res.render('registration', {error: false});

  • 检查error 是否存在如下:

&lt;% if( typeof(error) =="undefined")%&gt; //检查变量的类型

  • 您可以通过像这样访问locals 对象来查看变量error 是否存在:

&lt;% if(locals.error) %&gt;

【讨论】:

  • 这应该是正确的答案。从 locals 对象中获取变量可以防止 ejs 抛出未定义的错误。
【解决方案2】:

您可以在错误属性中使用一个不会进入 if 的值:

res.render('registration', {error: false});

【讨论】:

  • 当然!谢谢。早该想到但还是习惯表达/ejs
【解决方案3】:

以下代码解释了一个工作示例:

<% if (typeof error ='object' && error) { %>
    <li><%= error %></li>  
<% } %>

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      尝试通过运行命令再次启动服务器 $节点服务器.js

      注意:server.js 是用户自定义文件。

      【讨论】:

      • 我必须这样做。我的变量尚未定义。
      【解决方案6】:

      我知道这是几年前的事了,但以防其他人陷入困境。

      我通过将变量的范围更改为全局来解决此问题。如此简单的解决方法,但我花了几个小时才弄清楚。

      我没有在我的app.post 方法中使用变量,而是将所有内容都移到了app.get。然后我将res.redirect() 添加到我的app.post 方法中,并在js file 的顶部声明了我的所有变量。

      【讨论】:

        【解决方案7】:

        服务器:快速处理

        <% if (typeof data != undefined) { %>
           <li><%= data %></li>  
        <% } %>
        

        【讨论】:

          【解决方案8】:

          如果您稍后在执行操作后设置一些变量,那么您可能会考虑先将它们设置为 null。例如,您想渲染一个页面,在提取一些金额后检查现金余额,然后在加载页面 cash.ejs 时,您将收到这些未定义的错误,但您可以通过在渲染函数中首先将这些变量初始化为 null 来解决此问题像这样:

          app.get("/cash", function (req,res){
              res.render ( "cash.ejs",{amount:"", charge:"", newbalance: ""});
          });
          

          【讨论】:

            猜你喜欢
            • 2019-05-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-10-26
            • 2019-01-31
            相关资源
            最近更新 更多