gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:57:52 31 4
gpt4 key购买 nike

我在帖子路由内的服务器端代码中有一个全局变量,我试图在另一个帖子路由中访问它。第一次调用第二个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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com