2017-02-27 101 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}); 
      }); 

}); 
}); 

我創建了一個方法/寧靜。 「寧靜」是一個頁面。

我想要的就是當我加載這個頁面時,結果數組顯示出來,但是它在第一次加載時不顯示。

第二次導航它時顯示。所以數據不被檢索。

我該如何解決這個問題?

請幫我找到解決方案。

回答

0

我不相信這是由於在會議node.js的是如何工作的性質,但你可能要參考:https://stormpath.com/blog/everything-you-ever-wanted-to-know-about-node-dot-js-sessions

我會移動req.session.resultArrayforEach的,因爲沒有好處當您已經爲其值創建數組時,可以多次覆蓋該會話,您可以在建立完整陣列後稍後進行設置。我們使用res.render()來創建一個變量items在我們的視圖中公開內部變量resultArray。雖然如果你想玩,你可以使用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沒有填充值。它有空值。 – riza

+0

你可以在你的forEach循環中使用console.log(doc)'以確保它在第一次出現時獲得正確的文檔?如果不是的話,我們需要開始專門查看MongoDB,以及Object是如何存儲到Array中的。 – dostoevskylabs