NodeJS fs-无法读取外部json文件

时间:2019-04-04 12:48:31

标签: arrays node.js json express fs

我正在尝试使用fs读取外部json文件,然后将其记录下来,但它不起作用。在我的json文件中,我只有一个数组要读取:

{
"tags": [ "blah", "blah1", "etc..."
        ]
}

我正在使用异步readFile函数读取它

...
const tagsjson = require('../tags.json');
var tags;
...

 fs.readFile(tagsjson, 'utf8', function(err,data){
  if(err) throw err;

  tags = data;
})
 console.log(tags)

我不知道我尝试了JSON.parse(data)是什么问题,但是它也无法正常工作,我使用的是原始数据,因为我想在读取标签后将该标签发送给客户端。

2 个答案:

答案 0 :(得分:2)

您正在以错误的方式读取文件,这是错误

const tagsjson = require('../tags.json');

需要什么实际上将返回导出的内容,这将返回一个对象,而readFile函数将其第一个参数作为字符串

fs.readFile('../tags.json', 'utf8', function(err,data){
  if(err) throw err;

除了处理异步操作外,您还将处理两个选项

  • 回调
  • 承诺

为了诺言

const promise = new Promise((resolve, reject) => {
  fs.exists('../tags.json', (exists) => {
     if (exists) {
        fs.readFile('../tags.json', (err, data) => { 
          if(err) {
            console.log(err);
            reject(err);
            } else resolve(data);
         });
       } else {
         reject('File Does Not Exist!');
       }
   });
 });

promise
  .then(data => {
    console.log(data);
  })
  .catch(err => {
    console.log(err);
  });

答案 1 :(得分:1)

在使用异步文件读取时,必须在回调函数中使用您的tags变量。您还必须在readFile函数中传递文件名:

异步:

var tags;
fs.readFile("../tags.json", 'utf8', function (err, data) {
   if (err) throw err;

   tags = data;
   console.log(tags);
});

同步:

var tags;
tags = fs.readFileSync("../tags.json", 'utf8');
console.log(tags);