我創建了一個保存當前用戶值的全域變數(userEmail)。Post 請求處理授權并將當前用戶的電子郵件分配給該全域變數。將該全域變數 (userEmail) 匯出到另一個檔案時出現問題。另一個檔案將其讀取為“未分配”,可能是因為 module.export 在 route.post 之前運行。將另一個檔案中的全域變數通過 route.post 分配更改給當前用戶的解決方案是什么?
var userEmail = 'not assigned';
route.get('/', (req, res) => {
res.render('signIn');
})
route.post('/', (req, res) => {
let email = req.body["sign-in-email"];
let password = req.body["sign-in-password"];
let errorMessage = '';
userModel.findOne({ 'email': email }, 'email password balance', function (err, user) {
if (err) return handleError(err);
if (email == user.email) {
if (bcrypt.compareSync(password, user.password)) { // function returns true if password matched the database hashed password
userEmail = user.email;
exports = {userEmail};
res.render('dashboard', { email: userEmail , balance: user.balance})
console.log(userEmail)
} else {
errorMessage = 'Invalid password'
res.render('home', { errorMessage: errorMessage });
};
} else {
errorMessage = 'User Not Found'
res.render('home', { errorMessage: errorMessage });
}
});
})
module.exports = {route, userEmail};
uj5u.com熱心網友回復:
我創建了一個保存當前用戶值的全域變數(userEmail)。
這是你的第一個問題。沒有“當前用戶”之類的東西。可能有多個用戶都向您的 http 服務器發出請求,并且他們的請求正在處理中。
您不能在全域變數中保留特定于請求的狀態或特定于用戶的狀態。將該資訊狀態添加到請求的req物件中,以便處理請求的其他部分都可以從那里訪問它(這就是中間件所做的),將其添加到與特定用戶系結并可以從任何請求訪問的用戶會話中來自該用戶或將該狀態傳遞給在處理特定請求的回應時可能需要它的任何函式。
您不能將特定于用戶的狀態放入全域變數中。來自不同用戶的多個請求將覆寫全域,并且來自不同用戶的請求之間的狀態將混淆。
另外,這個結構:
module.exports = {route, userEmail};
匯出模塊初始化時的當前值userEmail(在您的代碼中將“未分配”)。隨著userEmail變數值的變化,匯出永遠不會改變。因此,除了這不是特定于請求的變數的正確結構(如上所述)之外,您也不能匯出這樣的東西。
在您的特定情況下,您似乎希望該userEmail值可用于該用戶未來的請求。有幾種方法可以做到這一點,但我建議使用express-session并將其添加userEmail到該用戶的會話物件中。然后,該會話物件將與來自該特定用戶的請求系結(通過存盤在 cookie 中的 sessionID),并且用戶會話物件中的資料將可用于該用戶的所有未來請求(在會話 cookie 的配置時間限制內) )。
uj5u.com熱心網友回復:
NodeJS 有一個全域變數,您可以使用它來管理全域值。這是全域變數的示例,如果您有一個記錄器類并且您希望在您的環境中全域擁有它的實體,您可以這樣做,
global.logger = new Logger()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/436971.html
標籤:javascript 节点.js 表示 路线
上一篇:使用貓鼬填充顯示作者
下一篇:驗證用戶名或電話號碼-比較
