如何保存会话
问题描述:
我已经在这里创造一个功能:如何保存会话
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.resultArray
出forEach
的,因为没有好处当您已经为其值创建数组时,可以多次覆盖该会话,您可以在建立完整阵列后稍后进行设置。我们使用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
,答案应该清楚给你。
也就是说,如果我正确理解你的问题。我明白这是因为'项目'没有被填充,直到页面刷新。 – dostoevskylabs
我试过上面的代码后。resultArray没有填充值。它有空值。 – riza
你可以在你的forEach循环中使用console.log(doc)'以确保它在第一次出现时获得正确的文档?如果不是的话,我们需要开始专门查看MongoDB,以及Object是如何存储到Array中的。 – dostoevskylabs