我是NodeJS和ExpressJS的新手,我正在尝试使用MySQL数据存储设置会话功能。我已经按照文档的方式调用了它,但是在运行命令之后,req.session是未定义的。我已经验证我在实例化cookie和会话时有一个与MySQL数据库的活动连接和一个常见的cookie秘密。我没有收到任何错误,但这是控制台调试输出...
terminal $ clear; DEBUG = express-mysql-session * npm start
node-app@0.0.0 start node_app
节点./bin/www
GET /登录200 7.458 ms - 249
express-mysql-session:log创建会话存储+ 0ms
express-mysql-session:log设置默认选项+ 3ms
POST / login 200 40.744 ms - 47
express-mysql-session:log设置有效期:900000ms + 7ms
express-mysql-session:log清除到期间隔+ 0ms`
我在运行时尝试启用调试...
var pool = mysql.createPool(options);
我甚至没有看到查询尝试运行以将会话添加到会话表。
这是我的申请流程: 在我的main.js文件中,我在顶部捕获所有请求并检查有效会话,如果我找不到,我会显示登录表单。
app.get('/*',function(req, res){
if (!req.session) {
var login = require('../js/login_functions');
res.send( login.getLoginForm() );
}});
登录表单发布到/ login,我验证用户名/密码是否有效,然后我创建了一个包含所需session.js文件的会话。这是session.js中的代码
var config = require('../admin/config');
var express = require('express');
var app = module.exports = express();
var db = require('../js/database');
var session = require('express-session');
var MySQLStore = require('express-mysql-session')(session);
module.exports = {
createSession: function( req, callback ){
db.getConnection( function( connection ){
var session_store_options = {
checkExpirationInterval: 900000,// How frequently expired sessions will be cleared; milliseconds.
expiration: config.SESS_MAX_AGE,// 10 hours session expiration
createDatabaseTable: false,
connectionLimit: config.DB_CONNECTION_LIMIT,
schema: {
tableName: config.SESS_TABLE_NAME,
columnNames: {
session_id: 'session_id',
expires: 'expires',
data: 'user_data'
}
}
};
var session_options = {
key: config.SESS_COOKIE_NAME,
secret: config.SESS_SECRET,
store: new MySQLStore(session_store_options, connection),
cookie: { maxAge: config.SESS_MAX_AGE },
genid: function(req) {
return genuuid() // use UUID for session ID
},
rolling: true,
resave: false,
saveUninitialized: false,
};
if( config.ENV.toLowerCase() === 'prod' ){
session_options.cookie.secure = true;
}
app.use( session( session_options ) );
if( config.DEBUG ){
console.log( req.session );
}
callback( session );
});
}
};
当我在上面的底部运行console.log(req.session)时,它会输出undefined。我错过了调用cookie和db存储会话的步骤吗?
答案 0 :(得分:0)
我发现会话没有被调用,我需要通过分解这样的会话调用来手动调用它
sess = session_( session_options );
sess( req, res, function(err){ if(err) console.log( 'error:', err ); } );
app.use( sess );
而不是这个
app.use( session( session_options ) );