Express 使用multer删除项目时删除图像

Express 使用multer删除项目时删除图像,express,multer,Express,Multer,好的,我使用multer上传用户提交的项目的图像。但是,当用户删除项目时,图像文件仍在服务器上。 我一直在试图弄清楚这一点,我不确定findByIdAndRemove()是否是在调用删除图像之前删除用户项,或者是什么,但我得到的错误是它找不到未定义的文件名。我正在使用一个承诺,认为它会允许我这样做,但我不知道还有什么地方可以去。我在这方面是新手,边走边学。以下是我的删除路线: router.delete("/item/:id", middleware.isLoggedIn, (req, res)

好的,我使用multer上传用户提交的项目的图像。但是,当用户删除项目时,图像文件仍在服务器上。 我一直在试图弄清楚这一点,我不确定findByIdAndRemove()是否是在调用删除图像之前删除用户项,或者是什么,但我得到的错误是它找不到未定义的文件名。我正在使用一个承诺,认为它会允许我这样做,但我不知道还有什么地方可以去。我在这方面是新手,边走边学。以下是我的删除路线:

router.delete("/item/:id", middleware.isLoggedIn, (req, res) => {
  Promise.all([
    (Item.findByIdAndRemove(req.params.id),
    fs.unlinkSync("./public/uploads/" + req.item.image))
  ])
    .then(() => {
      return res.render("products");
    })
    .catch(err => {
      return console.log("err", err.stack);
    });

有什么建议吗?

图像在哪里?你只是在请求中绑定了
id
,对不起,我在玩不同的东西,试图测试错误,直到我能找到答案。我把代码改成了刚开始时的样子。我原以为应该是req.item.image,但那不太管用。我知道req.param.id与用于删除项目的url绑定,但如何从中获取图像?取决于如何将其保存在文件系统上。如果您使用filename=
req.params.id
保存图像,只需在
unlinkSync
中使用它,而不是
req.item.image
。我将其保存为req.file.filename,当我使用它在浏览器上显示时,它将使用item.image调用它,这就是为什么我假设在尝试删除它时会使用item.image
如果(typeof req.file!==未定义){item.image=“/uploads/”+req.file.filename;}否则{item.image=“/uploads/no img.png”;}