我正在尝试调用fs.exists
节点脚本,但出现错误:
TypeError: Object # has no method 'exists'
我已经尝试用甚至替换fs.exists()
(require('fs').exists
以防require('path').exists
万一),但这些都没有列出exists()
我的 IDE 中的方法。fs
在我的脚本顶部声明为fs = require('fs');
,我以前用它来读取文件。
我怎么打电话exists()
?
我正在尝试调用fs.exists
节点脚本,但出现错误:
TypeError: Object # has no method 'exists'
我已经尝试用甚至替换fs.exists()
(require('fs').exists
以防require('path').exists
万一),但这些都没有列出exists()
我的 IDE 中的方法。fs
在我的脚本顶部声明为fs = require('fs');
,我以前用它来读取文件。
我怎么打电话exists()
?
您的要求声明可能不正确,请确保您有以下内容
var fs = require("fs");
fs.exists("/path/to/file",function(exists){
// handle result
});
在此处阅读文档
您应该使用fs.stats
orfs.access
代替。从节点文档中,不推荐使用存在(可能已删除。)
如果您试图做的不仅仅是检查存在,文档说使用fs.open
. 举个例子
fs.access('myfile', (err) => {
if (!err) {
console.log('myfile exists');
return;
}
console.log('myfile does not exist');
});
不要使用 fs.exists 请阅读其 API 文档以获取替代信息
这是建议的替代方法:继续打开文件,然后处理错误(如果有):
var fs = require('fs');
var cb_done_open_file = function(interesting_file, fd) {
console.log("Done opening file : " + interesting_file);
// we know the file exists and is readable
// now do something interesting with given file handle
};
// ------------ open file -------------------- //
// var interesting_file = "/tmp/aaa"; // does not exist
var interesting_file = "/some/cool_file";
var open_flags = "r";
fs.open(interesting_file, open_flags, function(error, fd) {
if (error) {
// either file does not exist or simply is not readable
throw new Error("ERROR - failed to open file : " + interesting_file);
}
cb_done_open_file(interesting_file, fd);
});
正如其他人指出的那样,fs.exists
已弃用,部分原因是它使用单个(success: boolean)
参数,而不是几乎在其他任何地方都存在的更常见的参数。(error, result)
但是,fs.existsSync
不推荐使用(因为它不使用回调,它只返回一个值),并且如果整个脚本的其余部分依赖于检查单个文件的存在,它可以使事情变得比必须处理更容易回调或用try
/包围调用catch
(在 的情况下accessSync
):
const fs = require('fs');
if (fs.existsSync(path)) {
// It exists
} else {
// It doesn't exist
}
当然existsSync
是同步和阻塞。虽然这有时很方便,但如果您需要并行执行其他操作(例如一次检查多个文件是否存在),您应该使用其他基于回调的方法之一。
现代版本的 Node 还支持基于 promise 的fs
方法版本,人们可能更喜欢回调:
fs.promises.access(path)
.then(() => {
// It exists
})
.catch(() => {
// It doesn't exist
});