1

我是 NodeJS 的新手,我正在开发创建注册表单的应用程序。要上传图片,我正在使用multer。对于表单验证,我使用的是express-validator。我的问题是,在表单验证之前,文件已上传。因此,如果用户由于某些验证错误而没有创建帐户,但文件会上传。问题是无论是否成功创建帐户,我都会为每个表单提交上传文件。

我想做的事?

我只想在用户成功创建帐户后保存文件。那么,无论如何在回调中使用 multer,所以当我的表单验证完成后,文件就会上传。我不能在multer中间件和最终回调之间使用快速验证中间件,因为快速验证将它的错误传递给下一个回调。这是我的一些代码

router.post('/registeration', multerMiddleware, validationMiddleware, finalCallback)

validationMiddleware是一个数组。

var multer = require('multer');
var multerMiddleware= multer({dest: './profile-images', fileFilter: userRegisteration.fileFilter}).single('profileImage');
var validationMiddleware = [check(...), check(...),...]
var finalCallback = function (req, res, next) {
 // code is here
}
4

1 回答 1

1

Express 路由器按照您挂载它们的顺序执行中间件

router.post('/registeration', multerMiddleware, validationMiddleware, finalCallback)

因此,在您完成验证multerMiddleware之前执行您的(并因此保存了文件) 。validationMiddleware

将代码更改为:

router.post('/registeration', validationMiddleware,multerMiddleware, finalCallback)

因此,multerMiddleware只有在验证请求后才会保存文件

于 2018-07-19T17:10:27.797 回答