2017-04-22 4 views
2

일부 세션 데이터 익스프레스 라우터 (express-session과 passport 사용)를 추가해야합니다. NodeJS express - 라우터 내부에 세션 데이터를 추가하는 방법은 무엇입니까?

나는 DB (몽고)의 사용자 레코드에 정확하게 데이터를 저장하고 세션 데이터에 값을 설정하려고 :
req.user.myData = "my session data"; 

는 불행하게도 사용자 데이터는 여권을 통해 사용자 인증 동안 연재하고 있습니다. 따라서 "myData"는 현재 세션에 저장되지 않습니다. 새 사용자 세션이 시작되면 데이터가 DB에서 올바르게로드되어 사용 가능합니다.

현재 세션에서 데이터를 사용할 수있는 방법이 있습니까? 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; if (req.session.myData) { myData = req.session.myData; } ' – dalicrosKH

+0

응용 프로그램 경로에서 사용하고 싶다면 내 업데이트 된 답변을 확인하십시오. "대부분의 것들이 미들웨어를 사용하여 완성되었으므로 사촌 자체가 미들웨어 기반 프레임 워크입니다 .docs : http://expressjs.com/en/guide /writing-middleware.html 원하는 미들웨어의 수를 체인화 할 수 있습니다. – num8er

+0

정확히 내가 필요한 것입니다. – dalicrosKH