我正在学习JavaScript和NodeJS。我创建了一个小示例,如以下发布的代码所示。每次我运行代码时,我都希望在 要访问的代码,然后将包含在“数据”变量中的相同文本添加到新行中。但是发生的是,每次我运行代码时,只有一行。
如何修复代码,以便每次运行代码时都会添加新行。
代码:
var fs = require('fs');
const file = 'c:/testDir/userNodejsTest.txt';
class FileIO {
constructor() {
if (this.isFileExists()) {
this.writeToFile();
}
}
writeToFile() {
var data = "hey there";
console.log("[writeToFile]");
fs.appendFileSync(file, data + "\n", function(err) {
if(err) {
console.log(err);
return false;
}
console.log("The file was saved!");
return true;
});
}
isFileExists() {
console.log("[isFileExists]");
fs.accessSync(file, fs.constants.F_OK, (err) => {
if (err) {
console.log("File does not exists");
return false;
}
console.log("File exists");
return true;
});
}
}
var fileIO = new FileIO();
module.exports = FileIO;
答案 0 :(得分:1)
您永远不会从true
返回false
或isFileExists()
,因此永远不会调用writeToFile()
。您正在将回调传递给fs.accessSync
并在该回调内部返回,但这并不相同。另外,fs.accessSync
是同步的(因此得名),无论如何都不会进行回调。
如果要测试文件的存在,您可能希望fs.existsSync
返回一个布尔值,指示路径是否存在。
有了它,您的功能将更像这样:
isFileExists() {
console.log("[isFileExists]");
let exists = fs.existsSync(file)
if (exists) {
console.log("File exists");
return true
}
console.log("no file")
return false
}
当然fs.existsSync()
很简单,您可以在构造函数中使用它:
constructor() {
if (fs.existsSync(file)) {
this.writeToFile();
}
}