我正在使用此代码块来创建和写入新目录和文件。 我刚刚开始学习nodejs
var lib = {};
lib.baseDir = path.join(__dirname,'/../.data/');
lib.create = function(dir,file,data,callback){
fs.open(lib.baseDir+dir+'/'+file+'.json', 'wx', function(err, fileDescriptor){
if(!err && fileDescriptor){
var stringData = JSON.stringify(data);
// Write to file and close it
fs.writeFile(fileDescriptor, stringData,function(err){
if(!err){
fs.close(fileDescriptor,function(err){
if(!err){
callback(false);
} else {
callback('Error closing new file');
}
});
} else {
callback('Error writing to new file'+'lib.baseDir');
}
});
} else {
callback(err);
}
});
};
但是我反复遇到错误
{ Error: ENOENT: no such file or directory, open 'C:\Users\Jawahr\Documents\GitHub\node-api\.data\test\newFile.json'
errno: -4058,
code: 'ENOENT',
syscall: 'open',
path: 'C:\\Users\\Jawahr\\Documents\\GitHub\\node-
api\\.data\\test\\newFile.json' }
以index.js的形式调用该库
var _data = require('./lib/data');
_data.create('test','newFile', {"asdksadlk" : "asldj"} ,function(err) {
console.log('this was the error ',err);
});
我已经在这里停留了一段时间,是因为pathname
和filename
包含了部分"C:"
,该部分在Windows 10中具有冒号保留字符,如果它是问题如何解决这个问题。
使用Windows 10和NodeJs 8.6。
答案 0 :(得分:0)
您可以试试吗-
fs.open(lib.baseDir+dir+'/'+file+'.json', 'w', function(err, fileDescriptor){
如果文件存在,看起来'wx'抛出错误-
'w' - Open file for writing. The file is created (if it does not exist) or truncated (if it exists).
'wx' - Like 'w' but fails if the path exists.
'w+' - Open file for reading and writing. The file is created (if it does not exist) or truncated (if it exists).
'wx+' - Like 'w+' but fails if the path exists.
引自here
答案 1 :(得分:0)
看起来像您放置文件的不存在或不可访问的路径。看:
fs.open('/path/is/not/exists/xx.js','wx',(err,fd)=>{
if (err) {
console.log(err.message);
}
});
得到
Error: ENOENT: no such file or directory, open '/path/is/not/exists/xx.js'
如果文件已经存在,您将得到类似Error: EEXIST: file already exists, open '...'
最后,但并非最不重要。代替lib.baseDir+dir+'/'+file+'.json'
更好的解决方案是使用path.join(lib.baseDir,dir,file+'.json')
模块中的path
答案 2 :(得分:0)
添加目录检查或在fs.open之前创建
if (!fs.existsSync(dir)){
fs.mkdirSync(dir);
}
然后其余的代码将起作用。因为fs.open仅在文件不存在时创建文件,也不会创建目录