2017-04-22 11 views
2

私はいくつかのセッションデータエクスプレスルータ(エクスプレスセッションとパスポートを使用して)を追加する必要があります。NodeJS express - セッションデータをルータに追加するには?

私はDB(モンゴ)内のユーザレコードに正しくデータを保存し、セッションデータに値を設定しよう:

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

は、残念ながら、ユーザデータのみがパスポートを介してユーザの認証時にシリアライズされます。したがって、 "myData"は現在のセッションに格納されません。新しいユーザーセッションが開始されると、データはDBから正しくロードされ、使用可能になります。

現在のセッションでデータを利用できる方法はありますか?ミドルウェアを使用して行わExpressJSの世界で

+0

'req.session.myData'を使用してはいけませんか?セッションオブジェクトにプロパティを追加し、セッションを保存することによって、データをセッションに挿入します。そのプロパティは、将来のリクエストのセッションオブジェクトの一部になります。あなたの答えは – jfriend00

答えて

0

ほとんどのようなもの:populateUserData.js

1)middlewaresフォルダ内の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; if(req.session.myData){ myData = req.session.myData;} ' – dalicrosKH

+0

あなたがアプリケーションルートでそれを使いたいのであれば、私が言ったように、私の更新された答えを確認してください。"ミドルウェアを使って行われたことのほとんどがミドルウェアベースのフレームワークです。 /writing-middleware.htmlあなたは何本のミドルウェアを連鎖させることができますか。 – num8er

+0

これは私が必要とするものです。 – dalicrosKH

関連する問題