fs-extra 不删除目录内的文件
fs-extra not removing files inside directory
我正在使用 fs-extra 库在我的节点 js 应用程序中根据 post 请求删除一些图像文件。每次我调用 /deleteproduct 路由时一切正常。我的产品已从数据库中删除,即使文件未删除,fs-extra 回调也不会抛出任何错误!我不知道是什么原因。我想也许我在 async/await 函数上做错了。
这是我的代码:
router.post('/deleteproduct', async (req, res) => {
try {
const id = req.body.id;
const deleteProduct = await prisma.product.findUnique({
where: { id: id }
});
const images = JSON.parse(deleteProduct.image);
for(let i = 0; i < images.length; i++) {
await fsExtra.remove(path.join(__dirname, `public/images/${images[i]}`), (err) => {
if (err) console.log(err);
});
console.log(images[i]);
}
await prisma.product.delete({
where: { id: id }
});
res.status(200).json({ msg: "Deleted product with id: " + id });
} catch (error) {
res.json({ msg: error });
}
});
编辑: 图像文件位于 public 目录中的图像文件夹中。
directory image
如果您需要更多信息,请发表评论
目录图片:
directories image
cpanel.js 正在删除文件
而不是这个:
await fsExtra.remove(path.join(__dirname, `public/images/${images[i]}`), (err) => {
if (err) console.log(err);
});
你能直接试试这个吗:
await fsExtra.remove(path.join(__dirname, `public/images/${images[i]}`));
fs-extra
returns 一个承诺,所以这应该有效。加一个try/catch
检查错误也可以实现
这里可能有两个问题。首先,您没有使用正确的路径来正确引用您的文件。其次,您同时使用 await 和 callbacks 。你可以这样做。
try {
const images = JSON.parse(deleteProduct.image);
const imageProm = [];
for(let i = 0; i < images.length; i++) {
imageProm.push(fsExtra.remove(path.join(__dirname, `public/images/${images[i]}`)
}
const result = await Promise.all(imageProm);
await prisma.product.delete({
where: { id: id }
});
}
catch (e) {console.log(e)}
如果上述解决方案不起作用,为什么您不能使用 fs.unlink
提供的本机方法来处理此类情况。尝试使用它。
注意:每当您使用 async/await 时,请使用 try/catch 块来捕获错误。
我正在使用 fs-extra 库在我的节点 js 应用程序中根据 post 请求删除一些图像文件。每次我调用 /deleteproduct 路由时一切正常。我的产品已从数据库中删除,即使文件未删除,fs-extra 回调也不会抛出任何错误!我不知道是什么原因。我想也许我在 async/await 函数上做错了。
这是我的代码:
router.post('/deleteproduct', async (req, res) => {
try {
const id = req.body.id;
const deleteProduct = await prisma.product.findUnique({
where: { id: id }
});
const images = JSON.parse(deleteProduct.image);
for(let i = 0; i < images.length; i++) {
await fsExtra.remove(path.join(__dirname, `public/images/${images[i]}`), (err) => {
if (err) console.log(err);
});
console.log(images[i]);
}
await prisma.product.delete({
where: { id: id }
});
res.status(200).json({ msg: "Deleted product with id: " + id });
} catch (error) {
res.json({ msg: error });
}
});
编辑: 图像文件位于 public 目录中的图像文件夹中。
directory image
如果您需要更多信息,请发表评论
目录图片:
directories image
cpanel.js 正在删除文件
而不是这个:
await fsExtra.remove(path.join(__dirname, `public/images/${images[i]}`), (err) => {
if (err) console.log(err);
});
你能直接试试这个吗:
await fsExtra.remove(path.join(__dirname, `public/images/${images[i]}`));
fs-extra
returns 一个承诺,所以这应该有效。加一个try/catch
检查错误也可以实现
这里可能有两个问题。首先,您没有使用正确的路径来正确引用您的文件。其次,您同时使用 await 和 callbacks 。你可以这样做。
try {
const images = JSON.parse(deleteProduct.image);
const imageProm = [];
for(let i = 0; i < images.length; i++) {
imageProm.push(fsExtra.remove(path.join(__dirname, `public/images/${images[i]}`)
}
const result = await Promise.all(imageProm);
await prisma.product.delete({
where: { id: id }
});
}
catch (e) {console.log(e)}
如果上述解决方案不起作用,为什么您不能使用 fs.unlink
提供的本机方法来处理此类情况。尝试使用它。
注意:每当您使用 async/await 时,请使用 try/catch 块来捕获错误。