javascript - Node.js 全局变量只能工作一次

标签 javascript node.js global-variables

我在帖子路由内的服务器端代码中有一个全局变量,我试图在另一个帖子路由中访问它。第一次调用第二个post路由时,代码执行得很好,但是当第二次触发第二个post路由时,全局变量的值就变成了undefined

声明全局变量的第一个帖子路由的片段:

app.post("/login", function(req, res) {
    ...
    fs.readFile('results.json', function (err, data) {
    if(err){
        console.log(err)

    } else{    

    var json = JSON.parse(data)

    ...

    global.Identifier;
    global.Identifier = Identifier;
    return global.Identifier;

    } 
    }

);
res.redirect("/");
});

访问全局变量的第二个 post 请求的片段:

app.post("/addtask", function(req, res) {
    var gloablIdentifier = global.Identifier;
    ...
    res.redirect("/");
};

(第二次访问第二个post请求时,gloablIdentifier的值 = undefined )

注意:我知道使用全局变量是非常糟糕的做法,在大多数情况下应该不惜一切代价避免使用,但我仍然想解决这个问题。

提前致谢

最佳答案

您没有等待 readFile 完成并返回响应。由于 fs.readFile 是异步的,global.Identifier 将稍后更新。您可以等待读取文件然后返回;

app.post("/login", function(req, res) {
  fs.readFile("results.json", function(err, data) {
    if (err) {
      console.log(err);
    } else {
      var json = JSON.parse(data);
      global.Identifier = Identifier;
      return global.Identifier;
    }
    // wait for read file
    res.redirect("/");
  });
  // res.redirect("/");
});

异步等待版本:

const { promisify } = require("util");
const readFile = promisify(fs.readFile);

app.post("/login", async function(req, res) {
  try {
    const data = await readFile("results.json");
    var json = JSON.parse(data);
    global.Identifier = Identifier;
    return res.redirect("/");
  } catch (error) {
    return res.redirect("/");
  }
});

关于javascript - Node.js 全局变量只能工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60929522/

相关文章:

javascript - 单击按钮/javascript 重新绘制谷歌图表

javascript - 在 for 循环中将对象添加到 'Json Array of Objects'

node.js - 路由器页面中的 NodeJS socket.io

android - 在android上解析socket.io数据。 (Gottox Socket.IO)

c++ - 从其他函数访问变量 C++

javascript - 如何在javascript中声明一个全局变量并在一个函数中赋值并在另一个函数中使用

javascript - 如何用 JavaScript window.location 链接替换所有 <a href ="..."> 链接以便在 Web 应用程序中使用?

javascript - 如何在 Javascript 中动态选择 JSON 对象分组的属性

node.js - JS 文件更改后出现奇怪的 Ionic CLI 错误

c++ - 从定义变量的程序之外的程序中检索 C 全局变量