Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   переменные сессии между обработчиками запросов (https://javascript.ru/forum/node-js-io-js/71600-peremennye-sessii-mezhdu-obrabotchikami-zaprosov.html)

BenAffee 30.11.2017 12:41

переменные сессии между обработчиками запросов
 
Доброго времени. Итак, я вновь не врубаюсь :blink:
Пришёл в nodejs из php. Хочу попробовать переделать "инициативный" проект под nodejs, база mysql уже есть от старой версии. Возникла проблема с сессиями в express. В index.js делаю так:

var express = require('express');
var router = express.Router();

//----------подключаем базу данных и сессии
var mysql = require('mysql');
var session = require('express-session');
var MySQLStore = require('express-mysql-session')(session);

var optionsDB = {
	host: 'localhost',
	port: 3306,
	user: 'user',
	password: 'pass',
	database: 'f724'
};

var connection = mysql.createConnection(optionsDB);
var sessionStore = new MySQLStore({
	key: 'session_cookie_name',
	secret: 'session_cookie_secret',
	store: sessionStore,
	resave: false,
	saveUninitialized: false
}, connection);

connection.connect();
//----------------------------------------

/* GET home page. */
router.get('/', function(req, res, next) {
	if (!req.session || !req.session.authOK) req.session = {authOK: false};
	req.session['username']='Васёк';

	res.render('index', { 
		username: req.session.username,
		authOK : req.session.authOK	});

	var str = "SELECT * FROM sessions;";
	connection.query(str, function(err, rows, fields) {
		if (err) throw err;
		console.log('сессии из базы - ' + rows[0]);
	});

	console.log('сессия в переменной - ' + req.session.username);
});



router.post('/login', function(req, res, next) {

	console.log(req.session.username);
	res.render('hello_user', { username: 'Васёк'});
	
});
module.exports = router;


В базе таблица для сессий создалась, но она пустая. Переменные сессии между обработчиками не передаются. Ответ на пост-запрос приходит с ошибкой 500. Если закомментить 51 строчку то ответ приходит с заголовком 200. В консоле вот:

Код:

  urmp:server Listening on port 3000 +0ms
сессия в переменной - Васёк
GET / 304 434.248 ms - -
сессии из базы - undefined
GET /stylesheets/style.css 304 5.617 ms - -
GET /javascripts/jquery-3.2.1.min.js 304 12.212 ms - -
GET /javascripts/scripts.js 304 39.243 ms - -
GET /images/urmp-logo.png 304 0.546 ms - -
POST /login 500 45.453 ms - 1051

что я делаю не так? Способ использования сессий взял с гитхаб.

destus 30.11.2017 13:19

BenAffee,
Что за странный объект передается в конструктор MySQLStore? Список опций ограничен этим, и ничем больше. А эти опции
key: 'session_cookie_name',
secret: 'session_cookie_secret',
store: sessionStore,
resave: false,
saveUninitialized: false

должны передаваться в конструктор session. А вообще вот рабочий пример.

BenAffee 30.11.2017 16:08

Ну так я второй пример (который "With an existing MySQL connection or pool") использовал, так как база у меня как раз есть и второе подключение делать не хотелось. Опции хранилища брал из первого примера (который "how to use"). Первый пример тоже пробовал, результат такой же. Пробовал redis- аналогично.

destus 30.11.2017 18:27

BenAffee,
var express = require('express');
var app = module.exports = express();

//----------подключаем базу данных и сессии
var mysql = require('mysql');
var session = require('express-session');
var MySQLStore = require('express-mysql-session')(session);

var optionsDB = {
	host: 'localhost',
	port: 3306,
	user: 'user',
	password: 'pass',
	database: 'f724'
};

var connection = mysql.createConnection(optionsDB);
var sessionStore = new MySQLStore({}, connection);

connection.connect();

app.use(session({
    key: 'session_cookie_name',
    secret: 'session_cookie_secret',
    store: sessionStore,
    resave: false,
    saveUninitialized: false
}))

BenAffee 01.12.2017 16:28

Спасибо. Но без результата.
В базу ничего не пишется.
Выявил, что куки не пишутся вообще никакие. или так и должно быть?


Часовой пояс GMT +3, время: 01:42.