如何使用Nodejs在Express-validator中验证multipart / form-data

时间:2017-11-18 06:12:09

标签: node.js

我的代码片段,其中显示我定义的路由器,检查正文参数并检查验证错误。

我定义的帖子请求:

router.post("/addEmployee",upload.any(), function(req, res, next) {

  /*I used multer because body data from multipart/form-data*/

var input = JSON.parse(req.body.data);

服务器验证: //验证不起作用,因为req.checkBody现在只获取bodyData我正在使用multipart / form-data(req.body.data)

req.checkBody('EMPID', "**EMPID must be Integer**").notEmpty().isNumeric();

req.checkBody('PAYROLLID', "**PAYROLLID must be Integer**").notEmpty().isNumeric();


.....

....

检查验证错误

var validationError = req.validationErrors(); //check error


// if (validationError) { //suppose get error -- throw that error


 res.json(validationError[0].msg);


 } else { //validation success


......strong text

3 个答案:

答案 0 :(得分:1)

在multer之后使用express validator中间件,这就是为什么表达验证器自然地工作

这个例子对我有用,试试这个

import require dependencies

var fs = require('fs');
var path = require('path');
var multer = require('multer');
var mkdirp = require('mkdirp');

配置multer

var obj = {};
var diskStorage = multer.diskStorage({

    destination:function(req,file,cb){

        var dest = path.join(__dirname,'/uploads');

        mkdirp(dest,function(err){
            if(err) cb(err,dest);
            else cb(null,dest);
        });
    },
    filename:function(req,file,cb){
        var ext = path.extname(file.originalname);
        var file_name = Date.now()+ext;
        obj.file_name = file_name;
        cb(null,file_name);
    }
});
var upload = multer({storage:diskStorage});

准备验证中间件

 var validator = function(req,res,next){

            req.checkBody('name').notEmpty().withMessage('Name field is required');
            req.checkBody('email')
            .notEmpty()
            .withMessage('Email field is required')
            .isEmail()
            .withMessage('Enter a valid email address')
            .isEmailExists()
            .withMessage('Email address already exists');

            req.checkBody('password').notEmpty().withMessage('Password field is required');
            req.checkBody('retype_password').notEmpty().withMessage('Retyp password field is required');

            req.checkBody('password').isEqual(req.body.retype_password).withMessage('Password and confirm password did not match.');

            req.checkBody('address').notEmpty().withMessage('Address field is required');

            req.asyncValidationErrors().then(function() {
                next();
            }).catch(function(errors) {
                req.flash('errors',errors);
                res.status(500).redirect('back');
            });

        }

将请求的数据保存到db

router.post('/store',upload.single('avatar'),validator,async function(req,res,next){

            var newUser = User({
                name:req.body.name,
                email:req.body.email,
                password:req.body.password,
                avatar:obj.file_name,
                address:req.body.address,
                created_at:new Date()
            });

            try{
                await newUser.save();
                req.flash('success_message','New user has been successfully created');
                return res.redirect('back');

            }catch(err){
                throw new Error(err);
            }
    });

答案 1 :(得分:0)

伙计们我找到了一个解决方案

router.post("/addEmployee",upload.any(), function(req, res, next) {

   /*I used multer because body data from multipart/form-data*/

   var input = JSON.parse(req.body.data);

   req.body = input;// solution this line
});

答案 2 :(得分:0)

exports.create = function (req, res) {
    req.assert('name', 'Name cannot be blank').notEmpty();
    req.assert('email', 'Email is not valid').isEmail();
    req.assert('password', 'Password cannot be blank').notEmpty();
    req.assert('password', 'Password must be at least 8 chars long').isLength({ min: 8 });

    const errors = req.validationErrors();

    if (errors) {
        return res.status(200).send(errors);
    }
    req.body.password = bcrypt.hashSync(req.body.password, 10);
    var model = new Admin(req.body);
    model.save(function (err, admin) {
        if (err) {
            res.status(500).send({ error: err });
            return;
        } else {
            res.status(200).send(admin);
        }
    });
};