无法在 Nodejs 中写入 JSON

Cannot write to JSON in Nodejs

我正在尝试创建一个实时 JSON ID 和标签数据库。数据库通过读取 JSON 文件进行刷新,我已将我的问题追溯到 Nodejs 未写入磁盘,我不太清楚为什么。

这是我的阅读操作,是的,那里有一个语法正确的文件。

        let dbraw = fs.readFileSync('db.json');
        var db = JSON.parse(dbraw);

这是我的写入操作,我需要将更新保存到磁盘。

                        var authorid = msg.author.id
                        db[authorid] = "M";
                        fs.writeFileSync('db.json', JSON.stringify(db));

我是不是做错了什么?这是我忘记的一个简单错误吗?是否有一种 easier/more 有效的方法来做到这一点我忘记了?我似乎无法弄清楚到底出了什么问题,但这与这两位有关。我的控制台中没有错误,只有它每次在读取操作时读取的空白 JSON 文件。

您的 JSON 文件路径有问题。

尝试使用 __dirname

__dirname tells you the absolute path of the directory containing the currently executing file.
source (DigitalOcean)

示例:

如果JSON文件在根目录:

let dbraw = fs.readFileSync(__dirname + '/db.json');
var db = JSON.parse(dbraw);

如果 JSON 文件在子目录中:

let dbraw = fs.readFileSync(__dirname + '/myJsonFolder/' + 'db.json');
var db = JSON.parse(dbraw);

旁注:我建议您阅读有关 Google Firestore 的内容,因为这将是处理实时更新的更快方法。

这是一个简单的块,可以完成所需的工作

const fs = require('fs');
let file_path = __dirname + '/db.json',
dbraw = fs.readFileSync(file_path),
db = JSON.parse(dbraw),
authorid = 'abc';
console.log(db);
db[authorid] = "M";
fs.writeFileSync(file_path, JSON.stringify(db));
dbraw = fs.readFileSync(file_path), db = JSON.parse(dbraw)
console.log(db);

我添加了一些用于调试的日志语句。这行得通,因此您的流程中可能还有其他内容缺失或不正确。最可能的问题是 jfriend00 在对您的问题的评论中指出的不同路径引用。

至于更好的解决方案,以下是一些建议

  1. 如果文件很小,直接为 json 使用 require 而不是读取文件,这将为您进行解析
  2. 使用异步 fs 函数
  3. 流式传输文件(如果文件很大)
  4. 看看是否可以使用像 redis 或数据库这样的缓存作为存储手段来减少应用程序的序列化和反序列化开销