NodeJS fs - 无法读取外部json文件[重复]

Posted

技术标签:

【中文标题】NodeJS fs - 无法读取外部json文件[重复]【英文标题】:NodeJS fs - Can't read external json file [duplicate] 【发布时间】:2019-08-26 05:41:29 【问题描述】:

我正在尝试使用 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) 但它也不起作用,我使用的是原始数据,因为我想在阅读后将该标签发送给客户端。

【问题讨论】:

...但它不起作用 什么不起作用?你有任何错误吗?还是因为readFile的异步调用有问题(因为console.log(tags)没有回调)? 我正在使用 try catch 并将其记录在浏览器控制台中,Failed to load resource: the server responded with a status of 500 (Internal Server Error) 文件名应该是例如一个字符串,const tagsjson = require('../tags.json'); 看起来有点不对。喜欢fs.readFile('../tags.json', 'utf8', (err, data) => ... 哦,它记录了这个The system cannot open the device or file specified让我试试你告诉我的 【参考方案1】:

当您使用异步文件读取时,您必须在回调函数中使用您的标签变量。您还必须在 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);

【讨论】:

如果我不能在回调函数之外使用标签,我将如何将其发送给客户端 你可以把剩下的代码放在这个回调里面,你可以使用Promises确保文件被读取后执行剩下的代码 或者你可以使用 readFileSync 函数来阻止代码的执行,并像你在代码中想要的那样使用你的标签 var 在 Node.js 中推荐同步方法从来都不是一个好主意。如果在服务器上使用 如果有异步方法,则永远不要使用同步方法 我知道并且我完全同意你的看法,但是它存在并且第一次,如果他不知道如何使用承诺,它可以成为一个解决方案【参考方案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);
  );

【讨论】:

以上是关于NodeJS fs - 无法读取外部json文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

fs.readFileSync无法读取nodejs中的文件传递路径变量

Node.js-nodejs可否读取远程文件到本地 有没有像php file

fs.readFile 无法在 nodejs 中使用 ffmpeg 读取缩略图生成的文件

nodejs里一般怎么读取数据库相关的配置文件

nodejs fs 读取文件流一次读取多少数据

读取JSON文件的有效方法?