我需要从后端删除一个图像文件,文件夹是:/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
你确定了吗:
- 是否包含
fs = require('fs')
- 使用了__dirname
- 是否包括文件扩展名(.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'});
})
});