Я пытаюсь настроить сеансы в моем приложении node.js. Для этого я использую модули «express», «express-session» и «express-mysql-session» для хранения их в базе данных на моем сервере. Мой код работает абсолютно нормально, пока я только получаю доступ к параметрам req.session внутри маршрута, в котором создается сеанс. На других маршрутах (или даже в файле запуска) созданные параметры генерируют неопределенную ошибку.
Я уже пытался создать app.use (session (...)) в файле запуска. Если я это сделаю, все будет работать нормально, а параметры, созданные на каком-либо маршруте, можно будет использовать и на других. Но так как я хочу, чтобы файл запуска был как можно меньше, эти строки кода должны обрабатываться в маршруте.
Вот мой код: login.js (маршрут)
var express = require('express');
var router = express.Router();
var session = require('express-session');
var MySQLStore = require('express-mysql-session');
var dbOptions = {
host: "ip",
user: "user",
password: "pw",
database: "some db"
};
var sessionStore = MySQLStore(dbOptions);
router.use(session({
key: 'some key',
secret: 'some secret',
store: sessionStore,
resave: false,
saveUninitialized: false
}));
router.post('/login', (req, res) =>{
req.session.username = req.body.username;
res.end("done");
});
router.get('/sessionTest', (req, res) => {
if(req.session.username) {
res.write(`<h1>Hello ${req.session.username} </h1><br>`);
res.end('<a href='+'/timetracking/logout'+'>Logout</a>');
}
else {
res.write('<h1>Please login first.</h1>');
res.end('<a href='+'/timetracking/login'+'>Login</a>');
}
});
router.get('/logout',(req,res) => {
req.session.destroy((err) => {
if(err) {
return console.log(err);
}
res.redirect('/timetracking/login');
});
});
module.exports = router;
timetracking.js (файл запуска)
var http = require('http');
const express = require('express');
const app = express();
var gets = require('./lib/gets');
var login = require('./lib/login');
const session = require('express-session');
//Make '/timetracking/' to the standard handler for get requests
app.use('/timetracking', [gets, login]);
app.get('/test', (req, res) =>{
res.send(req.session.username);
});
app.listen(80);
Когда я загружаю localhost / test, я все еще вижу cookie в инструментах веб-разработчика. Но "req.session.username" не определено.
Спасибо за помощь!