【问题标题】:Express-validator validation error variable throwing 'undefined' error on page loadExpress-validator 验证错误变量在页面加载时抛出“未定义”错误
【发布时间】:2019-01-04 04:38:05
【问题描述】:

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

// 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”变量有什么好处,这样我就不会收到“未定义”错误?

【问题讨论】:

  • 我看到你已经在输出errors.array()。这向你展示了什么?看起来是否实际上(至少)有一个元素,并且该元素是一个带有 msg 键的对象?
  • 实际上,如果没有contact-form.ejs 模板中的'if',我通过app.js 文件中的console.log 行成功获取了错误。但是在contact-form.ejs中添加了“if”,只需将联系表单加载到浏览器就会引发错误并停止服务器。
  • [ { location: 'body', param: 'firstName', value: '', msg: '请输入至少一个字母' }, { location: 'body', param: 'lastName ', value: '', msg: '请输入至少一个字母' }, { location: 'body', param: 'emailAddress', value: '', msg: '请输入有效的电子邮件地址' }, { location: 'body', param: 'message', value: '', msg: '请输入至少一个字母' } ]

标签: javascript express ejs express-validator


【解决方案1】:


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

【讨论】:

    猜你喜欢
    • 2019-05-27
    • 2018-07-23
    • 2015-10-24
    • 1970-01-01
    • 2020-01-23
    • 2016-09-07
    • 2019-12-27
    • 1970-01-01
    • 2021-10-26
    相关资源
    最近更新 更多