переменные сессии между обработчиками запросов
Доброго времени. Итак, я вновь не врубаюсь :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, время: 13:42. |