我有一个简单的功能,可以从数据库中删除产品条目,现在我也尝试删除该产品的图像文件。我检查了Node.js文件系统文档,发现有2个函数可以处理-fs.unlink(path, callback)
和fs.unlinkSync(path)
。我知道第一个是异步的,第二个是同步的,但是我仍然不确定应该使用哪个,为什么。
module.exports.deleteProduct = async (req, res, next) => {
let productId = req.body.productId
try {
let product = await Product.destroy({
where: {
id: productId
}
})
res.status(200).json({
product: product
})
} catch (e) {
console.log(e)
res.status(500)
}
}
一些代码和对您的想法:
正如其他人已经说过的那样,async
它比更好sync
,因此,即使您的API数量非常高,除非您的API数量极高,否则您将不会阻塞,如另一个答案所示。
您可以promises
通过以下方式使用fs API:
const fs = require('fs').promises; //es5 OR
import { promises as fs } from 'fs'; //es6
结合使用异步(非阻塞)API和单行代码await
。
特别说明:如果您未能取消目录的链接,您可能不希望您的API请求失败,就像您实际上从数据库中删除产品一样。
// make sure you are using the promise API from fs
const fs = require('fs').promises;
module.exports.deleteProduct = async (req, res, next) => {
let productId = req.body.productId
try {
let product = await Product.destroy({
where: {
id: productId
}
})
try {
await fs.unlink('the/path/to/the/product/image');
} catch {
// you may want to handle a failure to delete separately
}
res.status(200).json({product: product})
} catch (e) {
console.log(e)
res.status(500)
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句