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