2017-10-15 20 views
0

私は、特定のAPIへのPOST呼び出しを行い、そのデータを取得し、その結果をユーザーのセッションに格納する非同期メソッドを実装しようとしています。タスクそのものはかなり簡単なようですが、私はそれを「火と忘れ」のスタイルにすると問題になります。ヘッダーを設定した後にセッションを設定する

結果が外部APIから戻ってくるのを待つのではなく、ユーザーにリクエストされたページを読み込ませてブラウジングを続行させることができます。応答が準備ができているときだけ、私はそれをセッションに保存します。

すべてがうまくいっているようですが、セッションを設定して次のルートに進む唯一の問題は、すべてが最初のページに設定されていないかのように失われます。コードをデバッグすると、プロセスが何のエラーもなく完了したことが示されます。したがって、応答ヘッダーが設定された後にセッションを設定することに問題があると思われます。しかし、それがなぜ問題になるのか理解できないようです。

私はエクスプレスでnodejsを、セッションでは&のデータベース処理のためにmongodbを使用しています。

router.get('/myroute', function(req, res, next) { 
    request({ 
     url: endpoint, 
     method: "POST", 
     json: true, 
     body: jsonData 
    }, function(error, response, body) { 
    req.session.mykey = 'some response'; 
    }); 
    res.redirect('/otherroute'); 
}); 

router.get('/checkresult', function(req, res, next) { 
    res.json(req.session.mykey); 
}); 

答えて

1

私はあなたが明示的にsaveを呼び出す必要がありますだと思います。

function(error, response, body) { 
    req.session.mykey = 'some response'; 
    req.session.save(); 
} 

https://expressjs.com/en/resources/middleware/session.html#sessionsavecallback

セッションデータを保存するこの自動があまりにも早く発生しますあなたのケースでは

を変更されている場合、このメソッドは自動的にHTTPレスポンスの終了時に呼び出されます。

+0

素晴らしい!魅力のように動作します。 –

関連する問題