2017-04-22 101 views
2

我需要添加一些會話數據快速路由器(使用快速會話和護照)。NodeJS express - 如何在路由器中添加會話數據?

我正確地存儲數據到DB(蒙戈)用戶記錄並嘗試將值設置爲會話數據:

req.user.myData = "my session data"; 

不幸的是,用戶數據僅在通過Passport用戶授權連載。所以「myData」不會存儲到當前會話中。當新用戶會話啓動時,數據從數據庫正確加載並可用。

是否有任何方法(我期望如此)在當前會話中提供數據?在ExpressJS

+0

你不應該使用'req.session.myData'嗎?通過向會話對象添加屬性並保存會話,將數據放入會話中。該屬性將成爲未來請求會話對象的一部分。 – jfriend00

回答

0

大多數這樣的事情的世界進行使用中間件:

1)middlewares文件夾中創建的js文件:populateUserData.js

'use strict'; 

module.exports = (req, res, next) => { 
    if(!req.user) req.user = {}; 
    req.user.someData = 'something'; 

    next(); 
} 

2.1),將其固定護照後:

app.use(passport.initialize()); 
app.use(passport.session()); 
app.use(require('./middlewares/populateUserData')); 

2.2)將它附加到spe cific路線:

const populateUserData = require('./middlewares/populateUserData'); 

route.get('/api/users/me', 
    passport.authenticate('basic', { session: false }), 
    populateUserData, 
    (req, res) => { 
    res.json({ id: req.user.id, username: req.user.username }); 
    }); 
在組航線

2.3):

app.use('/api/users', 
    passport.authenticate('basic', { session: false }), 
    require('./middlewares/populateUserData'), 
    require('./routes/api/users')); 

也可以創建自己的中間件,這將是有益的,

例如:https://github.com/num8er/alttab-nodejs-challenge/blob/master/app.js#L19

+1

Thx爲您的答案。它在其他情況下幫助我。 但在我原來的情況下沒有。這是相當具體的應用程序/路線。我能夠做一點解決方法。 而不是存儲到用戶數據,我直接存儲會話數據: req.session.myData; 然後檢查用戶和會話數據: 'var myData = req.user.myData;如果(req.session.myData){ myData = req.session.myData; }' – dalicrosKH

+0

如果您想在應用程序路徑中使用它,請檢查我的更新答案,正如我所說的「大多數這樣的事情都是使用中間件完成的,cuz express本身就是基於中間件的框架。docs:http://expressjs.com/zh/guide /writing-middleware.html你可以鏈接你想要的中間件的數量。 – num8er

+0

這正是我需要的。 – dalicrosKH

相關問題