我正在尝试在节点脚本中调用fs.exists
但是我收到错误:
TypeError:对象#没有方法'存在'
我尝试将fs.exists()
替换为require('fs').exists
甚至require('path').exists
(以防万一),但这些都不会用我的IDE列出方法exists()
。 fs
在我的脚本顶部声明为fs = require('fs');
,之前我用它来读取文件。
如何拨打exists()
?
答案 0 :(得分:19)
您的要求声明可能不正确,请确保您拥有以下
var fs = require("fs");
fs.exists("/path/to/file",function(exists){
// handle result
});
阅读此处的文档
答案 1 :(得分:11)
您应该使用fs.stats
或fs.access
代替。从node documentation开始,不推荐使用exists(可能已删除。)
如果您尝试的不仅仅是检查存在,那么文档说要使用fs.open
。例如
fs.access('myfile', (err) => {
if (!err) {
console.log('myfile exists');
return;
}
console.log('myfile does not exist');
});
答案 2 :(得分:6)
请勿使用fs.exists please read its API doc for alternative
这是建议的备选方案:继续打开文件,然后处理错误,如果有的话:
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);
});
答案 3 :(得分:1)
这是一个使用bluebird替换现有存在的解决方案。
var Promise = require("bluebird")
var fs = Promise.promisifyAll(require('fs'))
fs.existsAsync = function(path){
return fs.openAsync(path, "r").then(function(stats){
return true
}).catch(function(stats){
return false
})
}
fs.existsAsync("./index.js").then(function(exists){
console.log(exists) // true || false
})