Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.11.2017, 12:41
Интересующийся
Отправить личное сообщение для BenAffee Посмотреть профиль Найти все сообщения от BenAffee
 
Регистрация: 21.11.2017
Сообщений: 10

переменные сессии между обработчиками запросов
Доброго времени. Итак, я вновь не врубаюсь
Пришёл в 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
что я делаю не так? Способ использования сессий взял с гитхаб.
Ответить с цитированием
  #2 (permalink)  
Старый 30.11.2017, 13:19
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

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

должны передаваться в конструктор session. А вообще вот рабочий пример.
Ответить с цитированием
  #3 (permalink)  
Старый 30.11.2017, 16:08
Интересующийся
Отправить личное сообщение для BenAffee Посмотреть профиль Найти все сообщения от BenAffee
 
Регистрация: 21.11.2017
Сообщений: 10

Ну так я второй пример (который "With an existing MySQL connection or pool") использовал, так как база у меня как раз есть и второе подключение делать не хотелось. Опции хранилища брал из первого примера (который "how to use"). Первый пример тоже пробовал, результат такой же. Пробовал redis- аналогично.
Ответить с цитированием
  #4 (permalink)  
Старый 30.11.2017, 18:27
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

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
}))
Ответить с цитированием
  #5 (permalink)  
Старый 01.12.2017, 16:28
Интересующийся
Отправить личное сообщение для BenAffee Посмотреть профиль Найти все сообщения от BenAffee
 
Регистрация: 21.11.2017
Сообщений: 10

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнить переменные между собой Ermite Общие вопросы Javascript 17 02.05.2016 14:28