【问题标题】:NodeJS Multer validate fields before uploadNodeJS Multer在上传之前验证字段
【发布时间】:2018-06-18 19:29:21
【问题描述】:

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

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

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

  name: 'images',
  maxCount: 20

}, {

  name: 'imageMain',
  maxCount: 1

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

});

这是我的中间件:

function formsValidation (req, res, next) {

  console.log(req.body) //getting empty array here
  return next();
}

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

【问题讨论】:

  • req.file ?还有4个去
  • 从 req.file 中获取未定义

标签: javascript node.js validation express multer


【解决方案1】:

来自 Multer 的docs

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

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

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

    name: 'images',
    maxCount: 20

}, {

    name: 'imageMain',
    maxCount: 1

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

【讨论】:

  • 我这样做了,但是如果图像已经更新,为什么我要验证表单?如果表单出错或者我已经看到 multer 的 onParsedEnd 可能会删除所有图像我可以在那里进行表单验证吗?
  • 我不明白你的问题,但我认为你想验证 req.body 并且它是空的,因为你的表单输入的顺序,如果你的文件输入位于表单的顶部,@ 987654326@ 将为空。尝试将您的文件输入放在表单的末尾,以便在 req.body 对象中捕获其他输入,还要确保在所有这些之前使用 body-parser 中间件
猜你喜欢
  • 1970-01-01
  • 2019-07-04
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 2018-07-14
  • 2015-01-03
相关资源
最近更新 更多