【问题标题】:What am I missing? I want to store my session to MySQL database我错过了什么?我想将我的会话存储到 MySQL 数据库
【发布时间】:2021-04-08 14:54:07
【问题描述】:

我的数据库已启动并正在运行。连接正常。我想将我的会话存储到数据库中。

这是我的代码。当我在浏览器上运行服务器时,出现此错误: RequestError: 没有为该请求指定连接。

我只是在一个 app.js 文件中保持简单。



var express = require('express');
var mysql = require('mysql2');
var session = require('express-session');
var MsSQLStore = require('mssql-session-store')(session);

var port = 3000;
var app = express();

var connection = mysql.createConnection ({
    host: 'localhost',
    user: 'root',
    password: '.....',
    database: 'node'
});

var sess = {
    secret: 'Pearl',
    resave: false,
    saveUninitialized: true,
    store: new MsSQLStore(options)
};

var options = {
    connection: connection,
    ttl: 3600,
    reapInterval: 3600,
    reapCallback: function() {console.log('expired sessions were removed');}
};



if(app.get('env') === 'production') {
    app.set('trust proxy', 1)
    sess.cookie.secure = true
}

app.use(session(sess));



connection.connect();
connection.query('Select 1 + 1 AS solution', (err, rows, fields) => {
    if (err) throw err

    console.log('the solution is: ', rows[0].solution)
});

app.listen(port, (req, res) => {
    console.log('the server is running, ' + ' please, open your browser at http://localhost:%s', port);

});


app.get('/', (req, res) => {
    res.end('Hello World');
});



【问题讨论】:

    标签: mysql node.js express mysql-workbench express-session


    【解决方案1】:

    store: new MsSQLStore(options) 中,您在为options 分配值之前尝试使用它,因此当您尝试使用它时它将是undefined。将options 的定义和赋值移到使用前。

    所以,改变这个:

    var sess = {
        secret: 'Pearl',
        resave: false,
        saveUninitialized: true,
        store: new MsSQLStore(options)
    };
    
    var options = {
        connection: connection,
        ttl: 3600,
        reapInterval: 3600,
        reapCallback: function() {console.log('expired sessions were removed');}
    };
    

    到这里:

    const options = {
        connection: connection,
        ttl: 3600,
        reapInterval: 3600,
        reapCallback: function() {console.log('expired sessions were removed');}
    };
    
    const sess = {
        secret: 'Pearl',
        resave: false,
        saveUninitialized: true,
        store: new MsSQLStore(options)
    };
    

    顺便说一句,如果您对这些使用 letconst,则解释器会将其标记为错误,这也是完全停止使用 var 的另一个原因。

    【讨论】:

    • 感谢您的回复。但这并不能解决它..弹出相同的错误..我按照您的指示进行了更改。
    • @Bobby - 也可能是 connection.connect(); 在您尝试使用连接进行会话初始化之后。
    • 您好,谢谢您的回复。我不认为是这样,因为我在会话初始化之前将其向上移动。也许它与获取路线有关?我想知道..
    • @Bobby - 所以,这些事情显然是错误的,需要修复。仅仅因为它仍然不起作用就意味着在它开始工作之前还有更多问题。与错误相关的堆栈跟踪是什么:RequestError: No connection is specified for that request.?这发生在哪一行代码和调用堆栈上?发生这种情况时,正在处理什么 GET 请求?如果你暂时注释掉app.use(session(sess));,错误会消失吗?
    • 感谢回复。是的,所以我评论了这一点,他们的错误消失了。这是唯一出现的其他东西。在 process._tickCallback (internal/process/next_tick.js:61:11)。
    猜你喜欢
    • 2018-04-23
    • 2011-03-25
    • 2021-10-31
    • 2019-03-30
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    相关资源
    最近更新 更多