【发布时间】:2018-08-17 20:56:10
【问题描述】:
我需要使用 connect-sqlite3 在 express-session (v4) GET 请求和 WebSockets on('connection') 之间共享会话。
以下没有 sqlite3 的基本设置(来自 Azmisov 在ExpressJS & Websocket & session sharing 的回答)有效:
global.app = express();
var sessionParser = require('express-session')({
secret:"some secret",
resave: true,
saveUninitialized: true
});
app.use(sessionParser);
app.get('*', function (req, res) {
req.session.working = "Yes";
});
wss.on('connection', function connection(ws, req) {
sessionParser(req, {}, function(){
console.log("New websocket connection: Working = " + req.session.working + ".");
});
});
但是,当我尝试使用 connect-sqlite3 实现此功能时:
var sessionParser = require('express-session');
var SQLiteStore = require('connect-sqlite3')(sessionParser);
app.use(sessionParser({
store: new SQLiteStore({dir:configuration.data_dir, db:'sessions.s3db', table:'sessions'}),
secret: 'some secret',
resave: false,
saveUninitialized: true,
cookie: {
maxAge: configuration.session_cookie_maxage_ms,
name: 'shadowlands'
},
}));
app.get('*', function (req, res) {
req.session.working = "Yes";
});
wss.on('connection', function connection(ws, req) {
sessionParser(req, {}, function(){
console.log("New websocket connection: Working = " + req.session.working + ".");
});
});
在 sessionParser(req, {}, function(){ ...) 的 wss on('connection') 中,我得到:
express-session deprecated undefined resave option; provide resave option; provide resave option.
express-session deprecated undefined saveUninitialized option; provide saveUninitialized option; provide saveUninitialized option.
express-session deprecated req.secret; provide secret option.
如果我更改为:仍然会出现此错误:
sessionParser(req, {secret: 'some secret', resave: false, saveUninitialized: true}, function(){
如果我取出“req”,错误就会消失:
sessionParser({secret: 'some secret', resave: false, saveUninitialized: true}, function(){
但是随后 sessionParser 函数没有被调用,并且 req.session.working 没有显示在控制台中。
会话确实保存到 sqlite3 数据库。
非常感谢任何帮助,谢谢! 埃里克·T。
【问题讨论】: