最终效果为:在js文件执行后,把json中的数据添加一条记录
开始时json的数据: [{"name":"小王"},{"name":"小李"}]
最终json文件的数据: [{"name":"小王"},{"name":"小李"},{"name":"小张"}]
const fs = require('fs')
const path = require('path')
let str = ''
//通过path.join拼接了个地址
const url = path.join(__dirname, './db/data.json')
//通过readFile获取json文件内的数据
fs.readFile(url, 'utf8', (err, data) => {
if (err) {
console.log('错误信息为', err);
return
}
str = JSON.parse(data)
str.push({ name: "小张" })
str = JSON.stringify(str)
})
//把更改后的数据传回json文件
fs.writeFile(url, str, 'utf8', (err) => {
console.log('错误提示为:', err);
})
以上代码最终结果是获取不到数据
const fs = require('fs')
const path = require('path')
let str = ''
//通过path.join拼接了个地址
const url = path.join(__dirname, './db/data.json')
//通过readFile获取json文件内的数据
fs.readFile(url, 'utf8', (err, data) => {
if (err) {
console.log('错误信息为', err);
return
}
str = JSON.parse(data)
str.push({ name: "小张" })
str = JSON.stringify(str)
//把更改后的数据传回json文件,为防止异步问题一定要在readFile的回调函数中执行
fs.writeFile(url, str, 'utf8', (err) => {
console.log('错误提示为:', err);
})
})
此处解决办法:将writeFile写在readFile的回调函数中。
导致此结果的原因是异步
错误代码运行流程为:
1.创建了 str = ''。
2.因为异步的原因导致先执行了writeFile,把''写入了数据文件内。
3.此时再获取文件,内容只有了空的字符串,所以报错。