每次执行时如何在文件中追加一行?

时间:2018-08-18 06:48:36

标签: javascript node.js

我正在学习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;

1 个答案:

答案 0 :(得分:1)

您永远不会从true返回falseisFileExists(),因此永远不会调用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();
    }
}