【问题标题】:updating JSON issue, how to correctly update?更新 JSON 问题,如何正确更新?
【发布时间】:2020-08-28 10:31:20
【问题描述】:

我有一个文件 issueData.json,我想在 POST 请求中更新。这是我的代码。 我尝试读取文件解析到数组,推送新的,然后重写。

app.post("/api/issues", (req, res, next) => {
  const issueObj = req.body;
  fs.readFile("issuesData.json", (err: Error, data: string | Buffer) => {
    if (err) {
      res.status(500).send(err);
    } else {
      const stringData = data.toString();
      const issueFile = [...JSON.parse(stringData)];
      const updatedIssueFile = issueFile.push(issueObj);
      fs.writeFile(
        "issuesData.json",
        JSON.stringify(updatedIssueFile),
        (err: Error) => {
          if (err) {
            res.status(500).send(err);
          } else {
            res.status(200).send("Issue has updated");
          }
        }
      );
    }
  });
});

1) 这是一个好习惯吗? 2)TS是这样吗,req、res、next的类型应该是什么? 3) 是不是更新JSON的好方法?

【问题讨论】:

    标签: node.js json express server filesystems


    【解决方案1】:

    如果您只是在写入文件,则可能不需要读取文件的内容并将您的 issueObj 附加到 issueFile 数组。也许您可以将 issueObj 写入文件中的新行。也许像 appendFile 函数这样的东西会有所帮助 (https://nodejs.org/api/fs.html#fs_fs_appendfile_path_data_options_callback)。

    目前,随着文件的增长,读取操作的时间会越来越长,并且会影响性​​能。但是,仅写入将确保您不会为每个 POST 请求产生开销。

    【讨论】:

    • 啊,好吧,为了阅读,我做了一个分页。所以 appendFile 就像“推”?
    • 注意我想添加到最后,因为在 JSON 中我有一个问题数组 [{id:....}, insert here]
    • appendFile 只会写入文件末尾的新行。从这个意义上说,它有点像“推送”,但为了澄清它只是将字符串写入文件。您可以在文件中坚持使用 JSON 数组,但是,我认为将每个 JSON 对象写在新行上可能会更好。然后,当您需要处理该信息时,逐行读取文件并将其附加到数组中。没有必要将数据保存在文件中的数组结构中,对吧?
    猜你喜欢
    • 1970-01-01
    • 2013-02-07
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2021-06-18
    相关资源
    最近更新 更多