J’ai essayé d’équilibrer la charge dans Nodejs via nginx en utilisant redis comme stockage de session.
J’utilise 3 machine
Je mets une variable de session dans la machine B et j’essaie d’accéder à la même variable de session via la machine C.
J’utilise Redis comme stockage de session, je devrais donc accéder à la variable dans la machine B.
Le codage de la machine B est (nom du fichier comme app.js)
var express = require('express'); var redis = require("redis"); var session = require('express-session'); var redisStore = require('connect-redis')(session); var bodyParser = require('body-parser'); var client = redis.createClient(); var app = express(); app.use(session({ secret: 'ssshhhhh', // create new redis store. store: new redisStore({ host: '192.168.14.65', port: 6379, client: client,ttl : 260}), saveUninitialized: false, resave: false })); app.get('/', function (req, res) { console.log(req.session); req.session.helloworld = 'helloworld'; res.send('set session'); }); app.listen(3000,function(){ console.log("App Started on PORT 3000"); });
le codage pour la machine C est (nom de fichier comme app.js)
var express = require('express'); var redis = require("redis"); var session = require('express-session'); var redisStore = require('connect-redis')(session); var bodyParser = require('body-parser'); var client = redis.createClient(); var app = express(); app.use(session({ secret: 'ssshhhhh', // create new redis store. store: new redisStore({ host: '192.168.14.65', port: 6379, client: client,ttl : 260}), saveUninitialized: false, resave: false })); app.get('/', function (req, res) { if(req.session.helloworld) { res.send('get session: '+ req.session.helloworld); } else { res.send('no session: '); } }); app.listen(3000,function(){ console.log("App Started on PORT 3000"); });
et j’ai package.json dans les deux machines
code package.json
{ "name": "Node-Session-Redis", "version": "0.0.1", "scripts": { "start": "node ./bin" }, "dependencies": { "async": "^1.2.1", "body-parser": "^1.13.0", "connect-redis": "^2.3.0", "cookie-parser": "^1.3.5", "ejs": "^2.3.1", "express": "^4.12.4", "express-session": "^1.11.3", "mysql": "^2.7.0", "redis": "^0.12.1" } }
Je lance le code en utilisant la commande
node app.js
Tout fonctionne bien dans la machine B.
mais je reçois une erreur dans la machine C.
TypeError: Cannot read property 'helloworld' of undefined at /home/local/PAYODA/balachandran.v/js/app.js:19:17 at Layer.handle [as handle_request] (/home/local/PAYODA/balachandran.v/js/node_modules/express/lib/router/layer.js:95:5) at next (/home/local/PAYODA/balachandran.v/js/node_modules/express/lib/router/route.js:131:13) at Route.dispatch (/home/local/PAYODA/balachandran.v/js/node_modules/express/lib/router/route.js:112:3) at Layer.handle [as handle_request] (/home/local/PAYODA/balachandran.v/js/node_modules/express/lib/router/layer.js:95:5) at /home/local/PAYODA/balachandran.v/js/node_modules/express/lib/router/index.js:277:22 at Function.process_params (/home/local/PAYODA/balachandran.v/js/node_modules/express/lib/router/index.js:330:12) at next (/home/local/PAYODA/balachandran.v/js/node_modules/express/lib/router/index.js:271:10) at session (/home/local/PAYODA/balachandran.v/js/node_modules/express-session/index.js:159:61) at Layer.handle [as handle_request] (/home/local/PAYODA/balachandran.v/js/node_modules/express/lib/router/layer.js:95:5)
Lorsque j’ai essayé req.session dans la console, j’ai eu une erreur dans la machine B Erreur B.
{ cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true } }
Erreur machine c
undefine
Quelqu’un peut-il s’il vous plaît me dire où je me trompe? Merci d’avance