【问题标题】:ExpressJS sessions with MySQL data store not working与 MySQL 数据存储的 ExpressJS 会话不起作用
【发布时间】: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 和数据库存储会话的步骤?

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    我发现会话没有被调用,我需要通过像这样分解会话调用来手动调用它

    sess = session_( session_options );
    sess( req, res, function(err){ if(err) console.log( 'error:', err ); } );
    app.use( sess );
    

    而不是这个

    app.use( session( session_options ) );
    

    【讨论】:

      猜你喜欢
      • 2015-04-29
      • 1970-01-01
      • 2023-04-10
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 2010-12-10
      • 1970-01-01
      相关资源
      最近更新 更多