1

私の 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);
            }
        });
    }


});
4

0 に答える 0