[英]Node.js global variable only works once
我的服務器端代碼中有一個全局變量在一個 post 路由中,我試圖在另一個 post 路由中訪問它。 第一次調用第二個 post 路由時代碼完美執行,但是第二次觸發第二個 post 路由時,全局變量的值變為undefined
。
聲明全局變量的第一個 post 路由的片段:
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("/");
});
訪問全局變量的第二個帖子請求的片段:
app.post("/addtask", function(req, res) {
var gloablIdentifier = global.Identifier;
...
res.redirect("/");
};
(第二次訪問第二個 post 請求時, gloablIdentifier
的值 = undefined
)
注意:我知道使用全局變量是非常糟糕的做法,在大多數情況下應該不惜一切代價避免使用,但我仍然想解決這個問題。
提前致謝
您沒有等待 readFile 必須完成並返回response
。 由於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("/");
}
});
從它的外觀來看,您正在使用類似 Express 的東西。
盡管這可能是一種不好的做法,但我認為您應該嘗試使用 express 本身提供的set
功能。
因此,在您的 app.js 中這樣做:
app.set("identifier", Identifier)
然后,在您的路線中:
app.post("/addtask", function(req, res) {
var gloablIdentifier = app.get('identifier')
...
res.redirect("/");
};
編輯:我測試了這個並且它有效。 另外,要再次更改變量,只需在您的路線上執行以下操作:
app.set('identifier', newValue)
我希望現在答案是完整的!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.