最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

数据验证停止了多部分表单数据的工作

运维笔记admin11浏览0评论

数据验证停止了多部分/表单数据的工作

数据验证停止了多部分/表单数据的工作

我使用express-validator检查文本字段和multer来检查头像。但我有一个问题,express-validator停止检查文本字段,如果您将该字段留空,快速验证器将不会给出该字段为空的错误消息。

我在单独的变量中显示了文本字段:

import { check, validationResult } from 'express-validator/check';

const validatorSignup = [
    check('user_name').exists().isLength({ min: 4, max: 20 }),
    ....
];

接下来,我想在注册时检查用户是否填写了所有字段以及是否加载了头像:

router.post('/signup', (req, res) => {
    try {
        upload(req, res, validatorSignup, (err) => {
            console.log(req.body)
            const errors = validationResult(req.body);
            if (!errors.isEmpty()) {
                return res.status(422).json({
                    err: errors.array()
                });
            }
      ....
    } catch (err) {
        return res.status(500).json({
            err: err
        });
    }
});

但是我收到一个错误:

onFinished(req, function () { next(err) })
                                    ^
TypeError: next is not a function

帮助解决我的问题。

回答如下:

调用序列搞砸了,这里有两件事是错的:

  1. upload是异步的,尝试捕获将无法正常工作。
  2. upload将像中间件一样被使用,你不能像这样期望mazxswpoi进行验证。这就是onFinished抛出错误的原因,因为multer期望第三个参数是validatorSignup,而不是数组。

因此,您的标记应该更像这样:

(next)=>{}

注1:我没有从文档中看到router.post('/signup', upload, validatorSignup, (req, res) => { console.log(req.body) const errors = validationResult(req.body); if (!errors.isEmpty()) { return res.status(422).json({ err: errors.array() }); } ... }); ,只有validationResult(req.body);

注意2:默认情况下,像validationResult(req);upload这样的中间件中的错误会自动产生500,如果你想自定义错误信息(比如你的错误的JSON),请查看validatorSignup(编写错误处理程序)

发布评论

评论列表(0)

  1. 暂无评论