【问题标题】:ExpressJS API keep insert data into DB eventhough Req didn't pass validation即使 Req 未通过验证,ExpressJS API 仍将数据插入 DB
【发布时间】:2019-11-24 18:47:29
【问题描述】:

我使用 ExpressJS 构建的 API 已成功在 db 中创建数据,但我的 API 继续在 db 中创建数据,即使 req 未通过验证。 这是我的控制器:

module.exports = {
    validate: function (method){
        switch (method) {
            case 'personalInfo': {
                return [
                    body('email').not().isEmpty().isEmail().normalizeEmail().withMessage('Your email is not valid')
                ]
            }
        }
    },

    createNewPersonalData: function (req, res) {
        const errors = validationResult(req).formatWith(utils.validationFound);
        if(!errors.isEmpty()){

            res.status(300).json(errors.array());
        }

        var name = req.body.name,
            email = req.body.email;

        PersonalInfo.create({
            name : name,
            email : email
        })
            .then(Personal_Info => {
                res.json({
                    'status': 'OK',
                    'messages': 'Personal Info Created',
                    'data': Personal_Info
                })
            });
    }
}

如果我发送如下请求:

{
   "name": "John",
   "email": "john"
}

API 应发送响应为

{
    "message": "Your email is not valid",
    "param": "email",     
}

我的问题是 API 继续在 db 中创建数据,尽管 req 和 res 像上面的例子一样。

谢谢

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    您应该将 create 调用包装在 else 块中

    createNewPersonalData: function (req, res) {
            const errors = validationResult(req).formatWith(utils.validationFound);
            if(!errors.isEmpty()){
    
                res.status(300).json(errors.array());
            } else {
    
            var name = req.body.name,
                email = req.body.email;
    
            PersonalInfo.create({
                name : name,
                email : email
            })
                .then(Personal_Info => {
                    res.json({
                        'status': 'OK',
                        'messages': 'Personal Info Created',
                        'data': Personal_Info
                    })
                });
            }
        }
    

    【讨论】:

      【解决方案2】:

      您需要return 停止进一步执行。

      if(!errors.isEmpty()) {
          return res.status(300).json(errors.array());
      }
      

      【讨论】:

      • 谢谢,它的工作。但是在发送响应时使用return就可以了吗?
      猜你喜欢
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      • 2014-03-18
      • 2018-11-09
      • 2021-02-13
      • 2017-04-04
      • 1970-01-01
      相关资源
      最近更新 更多