私の node.js app では、非同期呼び出しを使用してセッションを設定しています。セッション管理にはエクスプレスセッションを使用しました。ただし、セッションを設定すると時々動作します。angularアプリを使用して2つのnode.jsルートを呼び出しています。
初めて HTTP get 呼び出しを呼び出し、すべてのデータを正しく取得します。ただし、最後に遅延したルート データのみがセッションに設定されます。両方のルートからのデータではありません。遅延ルートからのデータを設定すると、高速ルート セッション データが置き換えられるようです。これが私のコードです。
すべてのデータがセッションに設定される場合があります。(ブラウザを 2 回更新した後)
var express = require('express');
var http = require('http');
var request = require('request');
var bodyParser = require('body-parser');
var session = require('express-session');
var ejs = require('ejs');
var cookieParser = require('cookie-parser'); // the session is stored in a cookie, so we use this to parse it
var app = express();
app.set('views', __dirname + '/views');
app.set('port', process.env.PORT || 8081);
app.use(express.static(__dirname + '/app/'));
app.use( bodyParser.json() ); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
extended: true
}));
app.use(cookieParser());
app.use(session({
secret: '232332dfdffd',
resave: false,
saveUninitialized: true,
cookie: { maxAge: 3600000 }}))
app.engine('html', ejs.renderFile);
var server = app.listen(8081,function(){
});
app.get('/route1', function(req, res , next) {
var data1 = req.session.data1;
if(data1){
console.log("Session is not null. Getting data1 from session");
res.status(200);
res.send(data1);
}else{
request({
url: "testUrl",
qs: {},
json: req.body,
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
}, function(error, response, body){
if(error) {
console.log("error "+error);
res.sendStatus(error);
} else {
req.session.data1 = response;
res.status(response.statusCode);
res.send(response);
}
});
}
});
app.get('/route2', function(req, res , next) {
var data2 = req.session.data2;
if(data2){
console.log("Session is not null. Getting data2 from session");
res.status(200);
res.send(data1);
}else{
request({
url: "testUrl2",
qs: {},
json: req.body,
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
}, function(error, response, body){
if(error) {
console.log("error "+error);
res.sendStatus(error);
} else {
req.session.data2 = response;
res.status(response.statusCode);
res.send(response);
}
});
}
});