为什么multer应该在进行任何操作之前上传文件?

时间:2018-08-30 15:52:06

标签: node.js express multer

穆特在快递上工作的方式是有线的!为什么穆特应该在中间件链中的控制器之前出现,这在设计上会导致服务器在检查DB操作之前就上传东西?

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

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

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

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

1 个答案:

答案 0 :(得分:0)

在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)从服务器中删除该文件,如果您已将其上传到第三名派对系统,您可以将其删除。

希望有帮助