【问题标题】:SequelizeConnectionError: Bad handshakeSequelizeConnectionError:握手错误
【发布时间】:2017-12-21 07:14:26
【问题描述】:

在查询我的 MySQL 数据库的第 5 个请求时,我目前收到 SequelizeConnectionError: Bad handshake 错误。我对服务器执行的第 5 次请求始终失败。

我正在使用 nodejs。处理post请求的代码如下:

routes.post('/login', (req, res) => {
    var email = req.body.email,
        password = req.body.password;

    models.User.findOne({ where: {email : email} }).then(function(user) {
        if(user){
            user.validPassword(password).then(result => {
                if(result){
                    res.json({ "result": "Password correct"});
                } else {
                    res.json({ "result": "Password incorrect"});
                }               
            });
        } else {
            res.json({ "result": "User not found."});
        }
    });
});

user.validPassword如下:

User.prototype.validPassword = function(password){
        var self = this;

        return new Promise(function(resolve, reject){
            cryptPassword(password, function(err, encrypted) {
                resolve(self.password === encrypted);
            });
        });
    }

我的 Sequelize 的配置如下:

var sequelize = new Sequelize(config.database, config.username, config.password, {
  host: config.host,
  dialect: config.dialect,
  pool: {
    max: 100,
    min: 0,
    idle: 10000,
    handleDisconnects: true
  }
});

我已尝试删除池,增加数量,检查 MySQL 是否没有连接限制,确保不需要证书并重新安装我的 MySQL 服务器。

MySQL 服务器在 Ubuntu 14.04 VPS 上运行,而不是托管在 Azure 上,因为前面的一些问题是基于此的。

【问题讨论】:

  • 你用的是什么sequelize版本?
  • 我使用的是 4.28.6
  • 你的服务器真的是 MySQL 吗?可能是mariadb?你用什么方言来进行sequalize?
  • 这是 MySQL,对此非常肯定。方言是mysql,(方言:'mysql')
  • mysql 方言你用mysql 还是mysql2 包?无论哪种方式,请尝试使用另一个。

标签: mysql node.js sequelize.js


【解决方案1】:

这原来是 mysql2 包的问题。我不得不删除它并改用 mysql 包。

如果遇到同样的错误,希望这可以帮助其他人。

【讨论】: