2012-04-28 7 views
0

메신저로 로그인하여 작은 응용 프로그램을 개발하고 세션 데이터에 액세스하는 데 문제가 있습니다.node.js 몽구스 세션 문제. 정의되면 정의되지 않습니까?

주의 : 고속 3.0, 커피 스크립트를 사용하고

을 몽구스 그래서 내 응용 프로그램에서 내가 가지고있는 다음과 같은 : 내 login.coffee에서

app.locals.use (req,res) -> 
    res.locals.session = req.session 
    res.locals.title = config.title 
    res.locals.href = config.href 

나는 다음을 수행하십시오

ModelUser.findOne {email: email, password: password}, (err, results) -> 
    if err then console.log err 
    if results? 
     req.session.user = results 
     req.session.authenticated = true 
     res.redirect '/' 
    else 
     req.session.error = 'bad login' 
     res.redirect '/' 

옥에서 #{session.user}을 출력하면 [bject,Object]이되지만 "name"또는 "email"에 입력하면 공백이 반환됩니다.

if req.session? then console.log req.session.user

반환 :

{ _id: '4f9b60ba7a7ab7e7f711920e', 
    email: '[email protected]', 
    name: 'Demo User', 
    password: '078d2bf82ee269cd9577588d212655c3a2162dc5b09e7c29c6a343926ee881a9' } 

그러나 console.log req.session.user.email을 할 경우 나에게 500 오류를 제공 내가 콘솔에 가서 app.coffee에서 세션 개체를 기록하면 다음 볼 수 있습니다 그것의 정의되지 않은 말 ..하지만 당신은 그것이 정의 볼 수 있기 때문에 왜 몰라.

편집 :

해결; 사용자가 있기 전에 계속 응용 프로그램을 사용하는 것은 비동기 문제였습니다. 는 찾기에 콜백을 보내 응용 프로그램의 흐름과 비동기 문제가 있습니다 다음()

if req.session.authenticated 
    require('./lib/getUser')(req.session.uid, (results) -> 
     res.locals.user = results 
     console.log res.locals 
     done() 
    ) 
    else 
    done() 
+0

해결되었습니다. 비동기 문제였습니다 – Menztrual

답변

1

사용했다. 결과가 반환되기 전에 서버가 계속 진행 중이므로 정의되지 않습니다.

+0

그게 꼭 필요한 것입니다. 감사! – Menztrual

관련 문제