如何保存会话

如何保存会话

问题描述:

我已经在这里创造一个功能:如何保存会话

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}); 
      }); 

}); 
}); 

我创建了一个方法/宁静。 “宁静”是一个页面。

我想要的就是当我加载这个页面时,结果数组显示出来,但是它在第一次加载时不显示。

第二次导航它时显示。所以数据不被检索。

我该如何解决这个问题?

请帮我找到解决方案。

我不相信这是由于在会议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