NodeJS Multer 在上传前验证字段

Joh*_*ohn 9 javascript validation node.js express multer

我正在尝试在上传图像之前验证我的表单,但我的中间件上出现空字符串

const upload = multer({
  storage: storage
});

router.post('/upload', formsValidation, upload.fields([{

  name: 'images',
  maxCount: 20

}, {

  name: 'imageMain',
  maxCount: 1

}]), function(req, res, next) {
  code...

});
Run Code Online (Sandbox Code Playgroud)

这是我的中间件:

function formsValidation (req, res, next) {

  console.log(req.body) //getting empty array here
  return next();
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用来自 multer 的 fileFilter,但有时我没有任何图像可以上传字符串来存储和验证,我尝试将 req.body 从 multipart/form-data 解析为字符串,然后验证并使用 next()但我收到一个范围错误,我该如何解决这个问题?

You*_*neL 1

这是来自 Multer 的文档

请注意,req.body 可能尚未完全填充。这取决于客户端向服务器传输字段和文件的顺序。

这意味着您必须formsValidation在 multer 中间件之后调用,以确保所有发布的数据已完全填充

router.post('/upload', upload.fields([{

    name: 'images',
    maxCount: 20

}, {

    name: 'imageMain',
    maxCount: 1

}]), formsValidation, function(req, res, next) {
    code...
});
Run Code Online (Sandbox Code Playgroud)

  • 我这样做了,但如果图像已经更新,为什么我还要验证表单?如果表单出错或者我看到 multer 有 onParsedEnd ,可能会删除所有图像,我可以在那里进行表单验证吗? (3认同)
  • 我不明白你的问题,但我认为你想验证“req.body”,并且由于表单输入的顺序,它是空的,如果你的文件输入位于表单顶部,“req.body”将是空的。尝试将文件输入放在表单的末尾,以便捕获 `req.body` 对象中的其他输入,还要确保使用 [body-parser](https://github.com/expressjs/body-parser ) 之前的中间件 (2认同)