gpt4 book ai didi

node.js - 为什么multer要在执行任何操作之前上传文件?

转载 作者:太空宇宙 更新时间:2023-11-04 00:06:20 25 4
gpt4 key购买 nike

Multer 在 Express 之上工作的方式是有线的!,为什么 Multer 应该在中间件链中的 Controller 之前,这在设计上会导致服务器在检查数据库操作之前上传内容?

例如,如果对文章进行后期操作,并且它包含一堆字段,其中一个是文件。

articleModel{title:String,image:String};
router.post('/', multer, articleController.createArticle);

现在,在请求命中时,链中的第一件事是上传请求中的文件,但是如果在将记录执行到数据库时发生错误(例如验证甚至重复)怎么办?只更新文章标题吗?旧文件会再次上传吗?

如何让multer在http操作回调的响应中上传文件?

最佳答案

在 Multer 实际处理图像之前,您确实可以制作各种东西:

var upload = multer({
dest: 'uploads/',
fileFilter: function (req, file, cb) {
// only images are allowed
var filetypes = /jpeg|jpg|png/;
var mimetype = filetypes.test(file.mimetype);
var extname = filetypes.test(path.extname(file.originalname).toLowerCase());

if (mimetype && extname) {
return cb(null, true);
}
cb("Error");
}
}).single('localImg');

app.post('/api/file', checkBody, auth, uploadFile, controller.aController);

以这段代码为例,您可以在 multer 处理您的文件之前进行各种中间件操作,但是 multer 是一个处理 multipart/form-data 的库,而不仅仅是文件,人们主要使用 multipart 来发送文件,但您也可以发送所有类型的数据,它会将它们附加到正文(req.body)

您的问题是:“为什么 multer 应该在执行任何操作之前上传文件?”您可以随时执行 multer,但 multer 将处理请求并将数据放入正文中。除非您不需要第一手的主体数据,否则您需要将 multer 放在第一个中间件中。

您的另一个问题是:“如果我只更新文章标题怎么办?旧文件将再次上传?”

不会,它只会上传一次,如果数据库有任何问题,任何错误或拒绝,您可以随时使用文件系统(fs)从您的服务器中删除该文件,如果您已经将其上传到第三方系统,您可以将其删除。

希望对你有帮助

关于node.js - 为什么multer要在执行任何操作之前上传文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52101079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com