在nodeJs中一起使用multer、CSRF和express-validator

问题描述 投票:0回答:2

在我的node.js应用程序中,我有一个

ejs
表单,其中有一些
express-validator
应该验证的文本输入字段,一个使用multer
image
文件,以及一个包含
CSRF
的隐藏输入令牌。 (我的应用程序中的所有其他形式也都有此令牌)

问题是,

CSRF
中间件是全局,并且在我的路由文件中的中间件之前运行每个请求,并且multer
中间件在该路由文件之一中运行。

我知道

multer

 应该放在 
CSRF 中间件之前,但就我而言,我必须将
multer
放在路由内 - 因为我希望它在
 express-validator 完成验证文本之后运行输入。

为什么我希望

multer

express-validator
之前运行并且无法使其全局化?

因为如果我将 multer 设置为全局,那么如果我的表单中有一个

valid

文件,即使文本输入是 invalid - 该文件仍将由 multer 上传,因为 multer 已在 Express 之前运行 -验证器开始运行,这是个大问题。 为了解决这个问题,我将

multer

中间件放置在路由内部和验证器之后,但现在

csrf
存在需要 multer 的问题。
这是我的代码的一部分:

multer 中间件:

const fileStorage = multer.diskStorage({ destination: (req, file, cb) => { cb(null, "images"); }, filename: (req, file, cb) => { cb(null, uuidv4() + "-" + file.originalname); }, }); const fileFilter = (req, file, cb) => { if (file.mimetype === "image/jpeg" || file.mimetype === "image/jpg" || file.mimetype === "image/png") { cb(null, true); } else { cb(null, false); } }; module.exports = multer({ dest: "images", storage: fileStorage, fileFilter:fileFilter}).single("image");

包含 multer 和express-validator 的路由文件:

const { productValidators } = require('../middleware/validators')//The express validator middlewares const multer = require('../middleware/multer') router.post("/add-product",isAuth,productValidators,multer,adminController.postAddProduct); router.post("/edit-product",isAuth, productValidators,multer, adminController.postEditProduct);

简而言之,我的问题是,如果其他验证失败,我需要 multer 停止上传图像。但唯一的方法是在 
multer

之后添加

express-validator
中间件,而不是使其成为全局中间件,这会导致
csrf
问题。
有替代方案吗?

感谢您的帮助。

javascript node.js multer express-validator csrf-token
2个回答
0
投票


-1
投票
req:Request, res:Response, next: NextFunction

主要验证中间件,如果不允许:

return res.status(401).json({ message: 'Error identification keys' })

	
© www.soinside.com 2019 - 2024. All rights reserved.