如果NodeJS中不存在文件,如何返回空数组

时间:2017-04-26 07:52:42

标签: node.js fs

我想在console.log中输入一条消息,如果我尝试读取一个不存在的文件,则返回一个空数组。 getAllNotes函数触发有效,错误肯定会被抛出no such file or directory, open 'notes.json'

但是,如果我在if语句中没有指定throw err,为什么会抛出错误?其次,为什么我的console.log消息没有输出而空数组没有返回?

var getAllNotes = () => {
  console.log("MADE IT TO GET ALL NOTES")
  var notesArray = fs.readFileSync('notes.json', (err, data) => {
    if (err) {
      console.log("There are no notes to display");
      return [];
    } else {
      console.log("DATA",data)
      console.log("MADE IT TO PARSE")
      return JSON.parse(data);
    }
  });
  console.log("INSIDE GET ALL NOTES", notesArray)
};

1 个答案:

答案 0 :(得分:2)

fs.readFileSync是一个阻止调用,并且不会像fs.readFile一样进行回调。它只返回文件的内容,参见下面的例子:

var fs = require('fs');
var date = fs.readFileSync('myfile', 'utf8');
console.log(data);

当我运行你的例子时,抛出一个异常,因为你提供了一个回调函数,它期望一个字符串或对象的options参数。

您可以使用fs.existsSync(path)进行阻止呼叫,以便在尝试阅读之前检查该文件是否存在。

或者,您可以使用readFile的非阻塞版本,并按照您的尝试提供回调。