2017-02-27 1 views
0

저장하는 방법 : 나는 편안한 방법을/만든세션 내가 여기에 함수를 만든

router.get('/restful',function(req,res,next){ 
    var resultArray=[]; 
    mongo.connect(url,function(err,db){ 
    assert.equal(null,err); 
    var cursor=db.collection('users').find(); 
    cursor.forEach(function(doc,err){ 
     assert.equal(null,err); 
     resultArray.push(doc); 
     req.session.resultArray=resultArray; 
    },function(){ 
     db.close(); 
     res.render('restful',{items:resultArray}); 
      }); 

}); 
}); 

합니다. "안절부절 못함"은 페이지입니다.

내가 원하는 것은이 페이지를로드 할 때 resultArray가 표시되지만 첫 번째로드에서는 표시되지 않습니다.

두 번째로 탐색 한 후에 표시됩니다. 따라서 데이터가 검색되지 않습니다.

이 문제를 어떻게 해결할 수 있습니까?

해결 방법을 찾도록 도와주십시오.

답변

0

나는이 세션은 Node.js를 작동하는 방법의 성격에 기인 생각하지 않는다, 그러나 당신은 참조 할 수 있습니다 : 어떤 혜택에이 없기 때문에 https://stormpath.com/blog/everything-you-ever-wanted-to-know-about-node-dot-js-sessions

나는 forEach에서 req.session.resultArray를 이동할 것 이미 값을 위해 배열을 만들 때 세션을 여러 번 덮어 쓰면 나중에 전체 배열을 만든 후에 설정할 수 있습니다.

우리가 쿠키 나 세션에 액세스하는 것을 기술적으로 망치고 있지 않기 때문에 새로운 세션 데이터를보기 위해 리디렉션을 호출해야하는 문제가되어서는 안됩니다. 우리는 res.render()을 사용하여 변수를 만듭니다 itemsresultArray에 대한 내부 변수를 공개합니다. 그걸로 놀고 싶다면 res.redirect('/restful')을 사용하여 데이터가 이미 초기화되어야하는 리디렉션을 호출 할 수 있습니다.

나는이

router.get('/restful', function(req, res, next) { 
    var resultArray = []; 
    mongo.connect(url, function(err, db) { 
    assert.equal(null, err); 
    var cursor = db.collection('users').find(); 
    cursor.forEach(function(doc, err){ 
     assert.equal(null, err); 
     resultArray.push(doc); 
    }); 
    db.close(); 
    }); 
    req.session.resultArray = resultArray; 
    // this should contain your 
    // session data 
    console.log(resultArray); 
    res.render('restful', {items:resultArray}); 
    next(); 
}); 

같은 것을 볼 것이다 그러나 나는주의하고 싶은, 당신이 직면하고있는 문제는 세션 데이터를 저장하거나 말하자면 접근 할 수없는하지, 오히려 당시 그 res.render()resultArray이보기에는이 변수 만 노출되어있어 아직 빌드되지 않은 것처럼 보입니다.

나는 당신의 resultArray를 로깅하는 것과 놀 것이고 대답은 당신에게 분명해질 것입니다.

+0

즉, 귀하의 질문을 정확하게 이해한다면 말입니다. 페이지가 새로 고침 될 때까지 항목이 채워지지 않으므로 이해합니다. – dostoevskylabs

+0

위의 코드를 시도한 후 resultArray 값으로 채우지 않습니다. 그것은 null 값이 있습니다. – riza

+0

forEach 루프에서'console.log (doc)'을 사용하여 처음에 올바른 문서를 얻었습니까? 그렇지 않다면 우리는 MongoDB를 구체적으로 살펴볼 필요가있을 것입니다. 그리고 아마도 Object가 Array에 저장되는 방법도 있습니다. – dostoevskylabs