переменные сессии между обработчиками запросов
Доброго времени. Итак, я вновь не врубаюсь :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 |
BenAffee,
Что за странный объект передается в конструктор MySQLStore? Список опций ограничен этим, и ничем больше. А эти опции key: 'session_cookie_name', secret: 'session_cookie_secret', store: sessionStore, resave: false, saveUninitialized: false должны передаваться в конструктор session. А вообще вот рабочий пример. |
Ну так я второй пример (который "With an existing MySQL connection or pool") использовал, так как база у меня как раз есть и второе подключение делать не хотелось. Опции хранилища брал из первого примера (который "how to use"). Первый пример тоже пробовал, результат такой же. Пробовал redis- аналогично.
|
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
}))
|
Спасибо. Но без результата.
В базу ничего не пишется. Выявил, что куки не пишутся вообще никакие. или так и должно быть? |
| Часовой пояс GMT +3, время: 20:19. |