2017-02-27 6 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が表示されますが、最初の読み込み時には表示されません。

2回目に移動した後に表示されます。したがって、データは取り出されていません。

どうすればこの問題を解決できますか?

解決策を見つけるのを手伝ってください。

答えて

0

は、私は、これはセッションがNode.jsの中でどのように動作するかの性質に起因しているとは思わないが、あなたは参照することもできます。何のメリットには存在しないようhttps://stormpath.com/blog/everything-you-ever-wanted-to-know-about-node-dot-js-sessions

私はforEachの外にreq.session.resultArrayを移動します既に値の配列を作成しているときにセッションを複数回上書きする場合は、配列全体を構築した後に設定することができます。

これは、クッキーやセッション(まだ)にアクセスすることを技術的に混乱させていないため、新しいセッションデータを表示するためにリダイレクトを呼び出す必要はありません。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

私はあなたの質問を正しく理解していると言います。私は 'items'がページが更新されるまで入力されていないので、それを理解しています。 – dostoevskylabs

+0

私は上記のコードを試した後。resultArrayは値を設定していません。それはnull値を持っています。 – riza

+0

forEachループで 'console.log(doc)'を実行して、最初に正しい文書が得られていることを確認できますか?もしそうでなければ、MongoDBを具体的に調べる必要があります。また、オブジェクトがArrayにどのように格納されているのかもしれません。 – dostoevskylabs

関連する問題