【发布时间】:2016-11-16 19:25:28
【问题描述】:
我是 NodeJS 和 ExpressJS 的新手,我正在尝试使用 MySQL 数据存储设置会话功能。关于如何调用它,我已经按照文档进行了操作,但是在我运行命令之后, req.session 是未定义的。当我实例化 cookie 和会话时,我已经验证了我与 MySQL 数据库的活动连接和一个公共 cookie 机密。我没有收到任何错误,但这里是控制台调试输出...
终端$ clear;DEBUG=express-mysql-session* npm start
node-app@0.0.0 启动 node_app
节点 ./bin/www
GET /login 200 7.458 毫秒 - 249
express-mysql-session:log 创建会话存储 +0ms
express-mysql-session:log 设置默认选项+3ms
POST /login 200 40.744 毫秒 - 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 ) 时,它输出未定义。我是否缺少调用 cookie 和数据库存储会话的步骤?
【问题讨论】: