nodejs fs.exists()

时间:2012-11-27 16:50:18

标签: javascript node.js

我正在尝试在节点脚本中调用fs.exists但是我收到错误:

  

TypeError:对象#没有方法'存在'

我尝试将fs.exists()替换为require('fs').exists甚至require('path').exists(以防万一),但这些都不会用我的IDE列出方法exists()fs在我的脚本顶部声明为fs = require('fs');,之前我用它来读取文件。

如何拨打exists()

4 个答案:

答案 0 :(得分:19)

您的要求声明可能不正确,请确保您拥有以下

var fs = require("fs");

fs.exists("/path/to/file",function(exists){
  // handle result
});

阅读此处的文档

http://nodejs.org/api/fs.html#fs_fs_exists_path_callback

答案 1 :(得分:11)

您应该使用fs.statsfs.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
})