【问题标题】:My express validation returns errors even when the form is correctly filled即使正确填写表单,我的快速验证也会返回错误
【发布时间】:2016-07-29 20:24:28
【问题描述】:

我已经为此奋斗了一段时间,我有这个 Nodejs Express 应用程序,当表单字段无效时,我的注册表单会返回一堆验证错误,这是一件好事,但是当表单正确填写时它仍然返回这些错误并且不提交任何数据。

这是用于注册的代码 route.post

router.post('/register', function(req, res, next){
var name = req.body.name;
var email = req.body.email;
var username = req.body.username;
var password = req.body.password;
var password2 = req.body.password2;

// Check for image field
if(req.files && req.files.profileimage){
    console.log('Uploading File...');

    // File Info
    var profileImageOriginalName    = req.files.profileimage.originalname;
    var profileImageName            = req.files.profileimage.name;
    var profileImageMime            = req.files.profileimage.mimetype;
    var profileImagePath            = req.file.profileimage.path;
    var profileImageExt             = req.files.profileimage.extension;
    var profileImageSize            = req.files.profileimage.size;

}else {
    // Set a Default Image
    var profileImageName = 'noimage.png';
}

// Form validation
req.checkBody('name', 'Name is required').notEmpty();
req.checkBody('email', 'Email is required').notEmpty();
req.checkBody('email', 'Invalid Email ID').isEmail();
req.checkBody('username', 'Username is required').notEmpty();
req.checkBody('password', 'Password field is required').notEmpty();
req.checkBody('password2', 'Password do not match').equals(req.body.password);

// Check for Validation errors
var errors = req.validationErrors();

if(errors){
    res.render('register', {
        errors: errors,
        name: name,
        email: email,
        username: username,
        password: password,
        password2: password2
    });
}else {
    var newUser = new User({
        name: name,
        email: email,
        username: username,
        password: password,
        profileimage: profileImageName
    });

    // Create User
    User.createUser(newUser, function(err, user){
        if(err) throw err;
        console.log(user);
    });

    // Success Message
    req.flash('success', 'You are now registered and may log in');

    res.location('/');
    res.redirect('/');
}
});

这是我的 register.jade 代码

extends layout
block content
    h1 Register
    p Please register using the form below
    ul.errors
        if errors
            each error, i in errors
                li.alert.alert-danger #{error.msg}
    form(method='post', action='/users/register', enctype='multipart/form-data')
        .form-group
            label Name
            input.form-control(name='name', type='text', placeholder='Enter Name')
        .form-group
            label Email
            input.form-control(name='email', type='text', placeholder='Enter Email')
        .form-group
            label Username
            input.form-control(name='username', type='text', placeholder='Enter Username')
        .form-group
            label Password
            input.form-control(name='password', type='password', placeholder='Enter Password')
        .form-group
            label Confirm Password
            input.form-control(name='password2', type='password', placeholder='Confirm Password')
        .form-group
            label Profile Image
            input.form-control(name='profileimage', type='file')
        input.btn.btn-default(name='submit', type='submit', value='Register')

任何帮助将不胜感激...谢谢

【问题讨论】:

  • 返回什么错误?您使用什么库进行验证?
  • 这些错误在 flash 消息中返回,我使用 express-validators req.checkBody('name', 'Name is required').notEmpty(); req.checkBody('电子邮件', '需要电子邮件').notEmpty(); req.checkBody('email', '无效的电子邮件 ID').isEmail(); req.checkBody('用户名', '需要用户名').notEmpty(); req.checkBody('password', '需要密码字段').notEmpty(); req.checkBody('password2', '密码不匹配').equals(req.body.password);
  • Em,您可以通过控制台记录错误以查看问题所在吗?
  • 控制台上没有错误...看起来不错
  • 记录errors 对象,看看为什么它不为空。

标签: javascript node.js forms express


【解决方案1】:

正文解析器不适用于设置为 form-data 的多部分表单属性,而是设置为 urlencoded,即 this

<form action="/register" method="post" multipart="urlencoded"></form>

你应该很好!谢谢大家的时间。祝你幸福

【讨论】:

    【解决方案2】:
    1) Use body parser and express-validator before router you used
    2) if you use multipart/form-data then you use validator middleware after multer file upload strategy 
    

    这是我的工作

    var validator = function(req,res,next){
      req.checkBody('name').notEmpty().withMessage('Name field is required');
    }
    
    router.post('/upload',multer.single('avatar'),validator,function(req,res,next){
      //req.body
      //req.file 
     both object available here 
    })
    

    【讨论】:

      猜你喜欢
      • 2022-11-09
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 2021-06-23
      • 1970-01-01
      • 2017-08-31
      相关资源
      最近更新 更多