数据验证停止工作 multipart/form-data
Data validation stopped working multipart/form-data
我使用 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
帮我解决问题。
调用顺序乱了,这里有两处错误:
upload
是异步的,try catch 将无法正常工作。
upload
将像中间件一样使用,您不能像这样通过 validatorSignup
期望 multer 进行验证。这就是为 onFinished 抛出错误的原因,因为 multer 期望第三个参数是 (next)=>{}
,而不是数组。
因此您的标记应该更像这样:
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()
});
}
...
});
注意 1:我没有从文档中看到 validationResult(req.body);
,只有 validationResult(req);
.
注意 2:默认情况下中间件中的错误如 upload
和 validatorSignup
将自动导致 500,如果你想自定义错误消息(如你的 JSON with err),查看 Express error handling(编写错误处理程序)
我使用 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
帮我解决问题。
调用顺序乱了,这里有两处错误:
upload
是异步的,try catch 将无法正常工作。upload
将像中间件一样使用,您不能像这样通过validatorSignup
期望 multer 进行验证。这就是为 onFinished 抛出错误的原因,因为 multer 期望第三个参数是(next)=>{}
,而不是数组。
因此您的标记应该更像这样:
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()
});
}
...
});
注意 1:我没有从文档中看到 validationResult(req.body);
,只有 validationResult(req);
.
注意 2:默认情况下中间件中的错误如 upload
和 validatorSignup
将自动导致 500,如果你想自定义错误消息(如你的 JSON with err),查看 Express error handling(编写错误处理程序)