【问题标题】:Nodejs reads an outdated version of a JSON fileNodejs 读取过时版本的 JSON 文件
【发布时间】:2022-01-31 17:56:29
【问题描述】:

我正在编写一个在 node js 中运行的网站。

我有一个网页,它读取包含表单数据的 JSON 文件:

# names.json:
["name1", "name2", "name3"]

然后在我的服务器端代码中,我有一个 get 请求,它从 names.json 读取数据并将其发送到我的网页。

在我的代码中都有一个发布请求,它可能会通过使用另一个页面上的表单来更改names.json 的内容。

# names.json becomes:
["name4", "name5", "name6"]

post 请求能够正确更改names.json 中的数据。这是因为我会经常手动检查 json 文件以检查我所做的更改是否已应用。

但是当我尝试使用 get 请求(使用表单中的按钮触发,方法为“get”)时,get 请求似乎正在使用 names.json 的版本,而其中的更改没有完全应用。这真的让我很困惑。

我的代码是这样的:

app.get('/getRequest', function(req, resp){
    let isLoggedIn = req.session.loggedin;
    let currentUser = req.session.username;
    if (isLoggedIn == true && (currentUser != null || currentUser != '')) {
        let joinTable = require("./names.json","utf-8");
        for (let i = 0; i < Object.keys(joinTable).length; i++) {
            // Syntax to analyse data from names.json...
            // Here the get request should see name4, name5 and name6
            // Instead it sees name1, name2 and name3 from before
        }
        // Syntax to send the data from names.json to profile.html.
        resp.redirect('/profile.html')
    } else {
        makeAlert("You are currently not logged in.");
        resp.redirect('/');
    }
    resp.end();

如前所述。此 GET 请求将使用在对 POST 请求进行任何更改之前看到的 names.json 中的数据。也就是说,就好像 POST 请求一开始就没有发生过一样。

我能够识别这一点,因为我可能会收到 name1name2name3,而不是 name4、name5andname6``` - 发布请求中所做的更改。

有人知道为什么会这样吗?

任何见解或帮助将不胜感激!

【问题讨论】:

  • 不要将 JSON 文件用作数据库。使用数据库作为数据库。 JSON 文件非常适合存储配置数据。一旦您的应用程序的一部分将新数据写入 JSON 文件作为应用程序的常规操作的一部分(即不是因为您在管理仪表板中轻弹了一个开关并创建了新的配置状态) - 删除JSON 文件方法并使用数据库。 JSON 文件不能作为存储层进行扩展。

标签: html node.js json


【解决方案1】:

require 缓存文件内容。每次都要从文件系统中读取(https://stackoverflow.com/a/25710749/1333262),或者清空require的缓存(node.js require() cache - possible to invalidate?

【讨论】:

  • 啊,我认为这真的很有帮助。非常感谢!
猜你喜欢
  • 2021-06-03
  • 2019-03-18
  • 2017-08-31
  • 2014-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多