尝试使用Node.js删除文件。我应该异步使用fs.unlink(path,callback)还是同步fs.unlinkSync(path)?

波比马鲁

我有一个简单的功能,可以从数据库中删除产品条目,现在我也尝试删除该产品的图像文件。我检查了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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档