【问题标题】:Creating a JSON file once, when the server first starts在服务器首次启动时创建一次 JSON 文件
【发布时间】:2015-10-24 16:01:40
【问题描述】:

我尝试创建一次 json 文件(服务器首先加载),以便以后可以仅引用该 json 文件,而不是每次用户请求该页面时都呈现该 JSON。

我有一个有效的 json。我用 firefox 和 here 检查了它,但是当我尝试使用 node.js 创建一个文件并且之前检查过 JSON 时,我得到了一个错误。

首先我创建它工作的文件(并且它被填充,但只有第一次使用新文件名,如果我再次使用相同的文件名,文件将是空的......)并且一旦我加载它,这个文件变空了,我得到了那个错误(实际上我不知道它什么时候变空,这是我的问题,我不知道错误在哪里..)。

错误:

module.js:489
    throw err;
          ^
SyntaxError: ...\data\my.json: Unexpected end of input
    at Object.parse (native)
    at Object.Module._extensions..json (module.js:486:27)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (...\routes\projects.js:72:14)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)

我正在使用

fs.unlink

fs.writeFile

我不明白这里发生了什么,完全奇怪......

ps.:我正在使用 Express.js

【问题讨论】:

    标签: javascript json node.js fs


    【解决方案1】:

    问题是在createDataOnceWhenServerFirstTimeStarts 中创建文件的代码是异步的。因此,当您尝试加载 JSON 时,它可能还没有被写入。 如果文件已经存在,还有另一个问题:fs.unlink 也是异步的,在写入文件之前您无需等待此步骤完成。

    如果这个初始化需要在服务器开始监听之前完成,我建议你只使用同步fs方法:

    exports.createDataOnceWhenServerFirstTimeStarts = function () {
    
    var myData = ...;//get data from funciton call
    var outputFilename = "data/my.json";
    
    if (fs.existsSync(outputFilename)) {
        try {
            fs.unlinkSync(outputFilename);
            console.log("File deleted successfully!");
        } catch (err) {
            return console.error(err);
        }
    } else {
        console.log("File does not exist!");
    }
    
    var dataToWrite = JSON.stringify(myData);//,null,4);
    try {
        fs.writeFileSync(outputFilename, dataToWrite);
        console.log("JSON saved to " + outputFilename);
    } catch (err) {
        return console.log(err);
    }
    };
    

    顺便说一句,您不一定需要先删除(取消链接)该文件,fs.writeFile 将覆盖它,如果它存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 2020-07-22
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多