ejs模板变量未在页面加载和错误上定义

时间:2015-08-02 20:53:38

标签: node.js express ejs

我有一张提交给快递应用的表单:

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

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

6 个答案:

答案 0 :(得分:3)

您可以使用错误属性中的值,该值不会进入if:

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

答案 1 :(得分:1)

  

检查此代码

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

答案 2 :(得分:1)

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

  • 使用Amit建议的方法:
  

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

  • 检查error是否存在,如下所示:
  

<% if( typeof(error) =="undefined")%> //检查变量的类型

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

<强> <% if(locals.error) %>

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

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

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