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