我已经阅读了Node.js的文档,除非我错过了一些东西,否则它不会告诉某些操作中的参数包含什么,特别是fs.mkdir()。正如您在文档中看到的,它不是很多。

目前,我有这段代码,它试图创建一个文件夹或使用一个现有的:

fs.mkdir(path,function(e){
    if(!e || (e && e.code === 'EEXIST')){
        //do something with contents
    } else {
        //debug
        console.log(e);
    }
});

但我想知道这是正确的方法吗?检查代码EEXIST是知道文件夹已经存在的正确方法吗?我知道我可以在创建目录之前执行fs.stat(),但这已经是两次对文件系统的访问了。

其次,是否有一个完整的或至少更详细的Node.js文档,其中包含错误对象包含什么,参数表示什么等细节。


当前回答

在我看来,在使用Javascript编写代码时,最好不要计算文件系统的命中次数。 然而,(1)stat & mkdir和(2)mkdir和检查(或丢弃)错误代码,这两种方法都是正确的方法来做你想要的。

其他回答

在我看来,在使用Javascript编写代码时,最好不要计算文件系统的命中次数。 然而,(1)stat & mkdir和(2)mkdir和检查(或丢弃)错误代码,这两种方法都是正确的方法来做你想要的。

fs的node.js文档。mkdir基本上遵循Linux手册页的mkdir(2)。这表明,如果路径存在,但不是目录,也将指示EEXIST,如果你走这条路,就会创建一个尴尬的角落情况。

你最好调用fs。Stat将告诉您路径是否存在,以及它是否是单个调用中的目录。对于(我假设的是)目录已经存在的正常情况,它只是一次文件系统命中。

这些fs模块方法是对原生C api的精简包装,所以你必须检查node.js文档中引用的手册页以获得详细信息。

您还可以使用fs-extra,它提供了许多常用的文件操作。

示例代码:

var fs = require('fs-extra')

fs.mkdirs('/tmp/some/long/path/that/prob/doesnt/exist', function (err) {
  if (err) return console.error(err)
  console.log("success!")
})

fs.mkdirsSync('/tmp/another/path')

文档地址:https://github.com/jprichardson/node-fs-extra#mkdirsdir-callback

实现这一点的好方法是使用mkdirp模块。

$ npm install mkdirp

使用它来运行需要该目录的函数。回调函数在路径创建后或路径已经存在时调用。mkdirp创建目录路径失败,设置错误err。

var mkdirp = require('mkdirp');
mkdirp('/tmp/some/path/foo', function(err) { 

    // path exists unless there was an error

});

你可以用这个:

if(!fs.existsSync("directory")){
    fs.mkdirSync("directory", 0766, function(err){
        if(err){
            console.log(err);
            // echo the result back
            response.send("ERROR! Can't make the directory! \n");
        }
    });
}