[个人报错]nodejs获取文件成功.但是写了writeFile写回文件,就获取不到内容???

399 阅读1分钟

最终效果为:在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.此时再获取文件,内容只有了空的字符串,所以报错。