我正在尝试使用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)是什么问题,但是它也无法正常工作,我使用的是原始数据,因为我想在读取标签后将该标签发送给客户端。
答案 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);