Express-validator验证错误变量在页面加载时引发“未定义”错误

时间:2019-01-03 20:03:18

标签: javascript express ejs express-validator

我正在处理联系表单,并使用express-validator进行验证。我正在尝试处理错误,这是到目前为止我的app.js文件中的代码(相关代码段):

// CREATE (POST) ROUTE - add new prospect to the DB
app.post('/contact', [
check('firstName', 'Please enter at least one letter').not().isEmpty().trim().escape(),
check('lastName', 'Please enter at least one letter').not().isEmpty().trim().escape(),
check('emailAddress', 'Please enter a valid email address').isEmail().normalizeEmail(),
check('message', 'Please enter at least one letter').not().isEmpty().trim().escape()
], (req, res) => {

// GET AND SANITIZE DATA
var firstname = req.sanitize(req.body.firstName);
var lastname = req.sanitize(req.body.lastName);
var emailaddress = req.sanitize(req.body.emailAddress);
var message = req.sanitize(req.body.message);
var newProspect = { firstName: firstname, lastName: lastname, emailAddress: emailaddress, phoneNumber: phonenumber, message: message };

// HANDLE FORM VALIDATION ERRORS
const errors = validationResult(req);
if(!errors.isEmpty()) {
    console.log(errors.array());
    return res.status(422).render('contact-form', {
        errorMessage: errors.array()[0].msg
    });
}

要将错误输出到浏览器,我在contact-form.ejs文件中的实际表格div上方有以下内容:

<% if(errorMessage) { %>
    <div class="user-message user-message--error"><%= errorMessage %></div>
<% } %>

当我为联系表单加载路线时,出现以下错误:

ReferenceError: /home/ubuntu/workspace/views/contact-form.ejs:13
    11|<p class="lead">Fill out the form below and we will respond as soon as possible.

    12|</p>

 >> 13|<% if(errorMessage) { %>

    14|<div class="user-message user-message--error"><%= errorMessage %></div>

    15|<% } %>

    16|<div class="form">


errorMessage is not defined  

我知道我在这里遗漏了一些东西,但是由于我的经验不足,对我来说到底是什么并不明显。

也许可以更好地提出这个问题,有效而成功地在我的contact-form.ejs模板中使用来自app.js的'errorMessage'变量有什么收获,以免出现“未定义”错误?

1 个答案:

答案 0 :(得分:0)


我认为您可能遇到范围问题。 errorMessage变量在哪里声明?引用的代码没有显示该位置,或者在!errors.isEmpty控制结构中隐式声明了该位置,在这种情况下,它对全局作用域不可用,并且稍后调用的errorMessage变量确实是没有定义的。
我无法测试您所包含的代码,但是在过去遇到过类似的问题后,我倾向于发现范围是问题所在。希望它也在这里,您可以继续寻求解决方案。如果不是,请再次发布,我们将尝试另一种外观:)。 HTH-菲利普(Philippe)