我在这里创建了一个函数:
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});
});
});
});
我创建了一个方法/ restful。 "宁静"是一个页面。
我想要的只是当我加载此页面时,resultArray会显示,但在第一次加载时不会显示。
我们第二次导航后显示它。所以没有检索到数据。
我该如何解决这个问题?
请帮我找到解决方案。
答案 0 :(得分:0)
我不相信这是因为会话在node.js中的工作方式,但您可能需要参考:https://stormpath.com/blog/everything-you-ever-wanted-to-know-about-node-dot-js-sessions
我会将req.session.resultArray
移出forEach
,因为当您已经为其值构建数组时多次覆盖会话没有任何好处,您可以稍后再设置它在你构建了整个阵列之后。
这不是一个需要调用重定向来查看新会话数据的问题,因为我们甚至在技术上都没有访问cookie或会话(但是),我们正在使用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
要建立,因为你只是将这个变量暴露给你的视图。
我会记录你的<ion-footer-bar keyboard-attach class="bar-stable item-input-inset" style="margin-bottom: 50px; height: 60px; background-color: white;">
<input style="width: 100%;" type="url" placeholder="{{'text_input' | translate}}" ng-model="post.new"/>
</ion-footer-bar>
,答案应该清楚了。