【问题标题】:Not able to read JSON file after writing to the same JSON file写入同一个 JSON 文件后无法读取 JSON 文件
【发布时间】:2019-06-20 18:58:26
【问题描述】:

我正在尝试写入一个 json 文件,我将在写入该文件后再次重新读取该文件。但是,当我尝试重新读取文件时,我的console.log(readJson()); 向我显示undefined。谁能建议我应该怎么做?

helper.js

const fs = require('fs')
const util = require('util');
const path = require('path')
const json_file = path.resolve(__dirname, "../json/metrics.json")



function readJson(){
    fs.readFile(json_file,function(err,data){
        if(err){
            return console.error(err)
        }
        let iplist = data.toString()
        iplist = JSON.parse(iplist)
        let str = JSON.stringify(iplist)
        return str
    })
}

function writeJson(ipdetails){

    fs.readFile(json_file,function(err,data){
        if(err){
            return console.error(err)
        }
        let iplist = data.toString()
        iplist = JSON.parse(iplist)
        iplist.table.push(ipdetails.data)
        let str = JSON.stringify(iplist)
        fs.writeFile(json_file,str,function(err){
            if(err){
                console.error(err);
            }
            console.log('returning readJson() below')
            console.log(readJson());
        })
    })
}


module.exports = {
    writeJson,
    readJson
}

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    return strreadFile 回调中,您应该像这样使用 Promise 或 fs.readFileSync

    function readJson() {
        let data = fs.readFileSync(json_file)
        let iplist = data.toString()
        iplist = JSON.parse(iplist)
        let str = JSON.stringify(iplist)
        return str
    }
    

    异步方式有点困难:

    function readJson() {
        new Promise((resolve, reject) =>
            fs.readFile(json_file, type, (err, data) => {
              let iplist = data.toString()
              iplist = JSON.parse(iplist)
              let str = JSON.stringify(iplist)
              return err ? reject(err) : resolve(str);
            })
        );
    }
    

    你这样调用异步版本:

    readJson().then((result) => {
      console.log(result)
    })
    

    async file example

    Here is some information on async functions

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回复。但是,我认为您的回答有误。 fs.readFileSync(json_file) 不应该有一个回调,我可以访问 data
    • 我正在尝试使用async 方式,当我尝试使用readJson().then((result) => { console.log(result) }) 时我得到undefined
    • 是的,确实如此。但是异步方式却没有。我真的很想了解如何使用 async/await 使其工作
    猜你喜欢
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2021-04-22
    相关资源
    最近更新 更多