我創造的NodeJS中的REST API與jsonwebtoken爲authentication.Problem是我創造我自己的路線中間件,解碼令牌和套req.session以及作爲解碼標記值的中間件對象屬性,但我只能訪問router.post()方法中的req.session,但無法訪問在中間件功能中設置的sessiondata屬性。變量不是在整個應用程序的NodeJS訪問+併發問題
下面是我的示例代碼
user.js的
var router=require('express').Router();
var AuthenticateLib=require('app/libraries/authentication');
router.post('/updateprofile',AuthenticateLib.verifyToken,function(req,res){
console.log(req.session); // is accessible over here
console.log(AuthenticateLib.sessiondata) // prints null
});
authentication.js
module.exports={
sessiondata:null,
verifyToken:function(req,res,next){
var token = req.headers.authorization;
return jwt.verifyAsync(token,config.getParam('security.jwtSecret'))
.then(decoded => {
req.session=decoded;
this.sessiondata=decoded;
next();
})
.catch(...)
}}
我創建sessiondata屬性,因爲REQ對象未遍佈應用avaliable,所以我想可能是我可以要求AuthenticateLib的,並在我需要訪問我的會話的任何地方訪問我的文件中的sessiondata屬性。
我的目標是,我應該能夠訪問不僅router.post但在應用程序的任何其他文件我的會話數據。
我試着添加AuthenticateLib.sessiondata = req.session;只是在router.post行之後,一切正常,但它是唯一的方法。爲什麼不設置中間件sessiondata屬性不起作用。 另外我該如何解決與sessiondata屬性相關的併發問題。
任何幫助,將不勝感激。
即使它可以工作,「AuthenticateLib.sessiondata」將在我看到的所有請求之間共享,這意味着您的站點永遠不會支持多個併發用戶。如果多個併發用戶已登錄會有AuthenticateLib.sessiondata的多個副本按user.correct我,如果我錯了 – robertklep
AuthenticateLib.sessiondata生活會只爲user.So的這一請求.sessiondata'是每個請求的相同屬性,所以它將被每個調用'verifyToken'的請求覆蓋,而不管代表哪個用戶發出了請求。 – Vibhas
你錯了:)'AuthenticateLib – robertklep