我正在使用以下调用删除在Linux(RHEL)上运行的nodeJS应用程序中的现有文件。
fs.unlink(downloadsFolder + '/' + file)
然而,几天后我注意到文件仍然在系统中,因为文件句柄没有被释放。我重新启动了节点服务器,这些文件最终消失了。如何以编程方式解决此问题?
dzdo lsof -L | grep -i deleted
node 48782 root 600743243 403197165 /mnt/downloads/file_1516312894734.csv (deleted)
node 48782 root 14999 403197166 /mnt/downloads/file_1516729327306.csv (deleted)
我也在fs.unlink()
的日志中收到此警告,这会导致它吗?
(node:48782) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.
答案 0 :(得分:0)
正如警告所说,fs.unlink方法是asynchronous,这意味着你必须提供一个在删除操作完成时执行的回调函数:
fs.unlink(downloadsFolder + '/' + file, (err) => {
if (err) throw err;
console.log('File successfully deleted');
});
或者您可以使用fs.unlink
的同步版本:
fs.unlinkSync(downloadsFolder + '/' + file);