Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果我连续刷新页面,JSON文件将被清除_Javascript_Node.js_Json - Fatal编程技术网

Javascript 如果我连续刷新页面,JSON文件将被清除

Javascript 如果我连续刷新页面,JSON文件将被清除,javascript,node.js,json,Javascript,Node.js,Json,我使用fs模块读取/写入我的JSON文件。但是如果我快速重新启动页面,我的JSON文件将被清除 我在页面开头读取JSON数据 let preferencesJSON; try { preferencesJSON = fs.readFileSync(__dirname+"/../preferences.json", {encoding:'utf-8', flag:'r'}) } catch(e) { throw e; } const preferencesObj

我使用
fs
模块读取/写入我的JSON文件。但是如果我快速重新启动页面,我的JSON文件将被清除

我在页面开头读取JSON数据

let preferencesJSON;
try {
    preferencesJSON = fs.readFileSync(__dirname+"/../preferences.json", {encoding:'utf-8', flag:'r'})
} catch(e) {
    throw e;
}
const preferencesObj = JSON.parse(preferencesJSON);
在另一个脚本中,我使用
fs
写入JSON文件

preferencesWelcomeJSON = preferencesObj;
preferencesWelcomeJSON.welcome = false;
fs.writeFile(__dirname+"/../preferences.json", JSON.stringify(preferencesObj), function(err, data){});

欢迎来到多进程文件访问的奇妙世界

您需要在写入文件时锁定该文件,以便没有其他内容同时从中读取

这通常由以下人员完成:

  • 正在创建另一个文件(例如yourfile.pid),其中包含在写入之前执行写入的程序的进程id
  • 正在进行文件写入
  • 删除pid文件
  • 同时,读取过程:

  • 检查pid文件是否存在
  • 如果是,请等待,然后再次检查(在循环中)
  • 仅在不存在pid文件时读取该文件
  • 然后,您必须处理脚本崩溃和留下陈旧锁文件的可能性

    有这样的模块可以帮助实现这一点


    更好的解决方案是不使用JSON存储更改的数据

    改用真实的数据库。这将自动解决文件锁定问题


    根据需要从数据库生成JSON(而不是从静态文件读取)。

    由于
    \uu dirname
    的值不同,您可能正在将文件写入与启动时读取的位置不同的位置。检查你在启动时读到的时间戳,看看它是否真的在更新。什么!!!天哪,我不知道需要这么多。我的回答完全是浪费!