使用节点file System和MongoDB从后端删除图像文件



我需要从后端删除一个图像文件,文件夹是:/uploads。当我调用函数deleteProduct时,它会从数据库中删除产品,但产品的图像仍在文件夹中。

deleteProduct: (req, res) => {
let productId = req.params.id;
Product.findById(productId, (err, res) =>{
var imageResponse = res.image; 
console.log(imageResponse); 
});
//console.log(imageResponse);
//fs.unlink('./uploads' + imageResponse );

当我试图访问findById之外的imageResponse时,控制台会打印:";imageResponse";未定义。然后我需要用fs删除那个文件。我不确定我写的unlink函数是否正确。提前谢谢。

对于fs.unlink

你确定了吗:

  1. 是否包含fs = require('fs')
  2. 使用了__dirname
  3. 是否包括文件扩展名(.png、.jpg、.jpeg(
const fs = require('fs');
fs.unlink(__dirname + '/uploads' + imageResponse + ".png", (err) => {
if (err) throw err;
console.log('successfully deleted file');
});

对于未定义的图像响应

您没有提供有关Product构造函数的信息,但我认为Product.findById是异步的。您可能需要使用异步功能

const fs = require('fs');
async function deleteProduct (req, res) => {
let productId = req.params.id;
Product.findById(productId, (err, res) =>{
var imageResponse = res.image; 
console.log(imageResponse);
fs.unlink(__dirname + '/uploads' + imageResponse + ".png", (err) => {
if (err) throw err;
console.log('successfully deleted file');
});
});
}

进一步阅读:节点文件API:https://nodejs.org/api/fs.html异步函数:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

终于可以工作了,文件成功地从文件夹中消失了,我仍然在寻求建议,谢谢。

deleteProduct: (req, res) => {
let productId = req.params.id;
Product.findById(productId, (err, res) =>{
if(err) return res.status(500).send({message: 'Error'});
fs.unlink('./uploads/' + res.image, (err) => {
if(err) return res.status(500).send({message: 'Error'});
})
});

最新更新