【问题标题】:nodejs express reconnect mysql ER_ACCESS_DENIED_ERROR: Access denied for user ''@'localhost' (using password: NO)nodejs express重新连接mysql ER_ACCESS_DENIED_ERROR:用户''@'localhost'的访问被拒绝(使用密码:否)
【发布时间】:2021-12-30 20:04:02
【问题描述】:

起初我的 sql 代码是:

var express = require('express');

const mysql = require("mysql");

var db = mysql.createConnection({
    host: 'ipaddress',
    user: 'username',
    password: 'password',
    database: 'my77admin'
});

db.connect(function (err) {
    if (err) throw err;
    console.log("Connected!");
});

并且一直断开连接 所以经过一些研究后,我添加了一个句柄断开连接以重新连接 mysql 上面代码的下面

function handleDisconnect(myconnection) {
    myconnection.on('error', function (err) {
        console.log('\nRe-connecting lost connection: ' + err.stack);
        db.destroy();
        db = mysql.createConnection(db.db);
        handleDisconnect(db);
        db.connect();
    });
}

handleDisconnect(db);


module.exports = db

现在问题变成了 我的 pm2 中的错误日志

│││ www > error when connecting to db: Error: ER_ACCESS_DENIED_ERROR: Access denied for user ''@'localhost' (using password: NO) │
│││ www >     at Handshake.Sequence._packetToError (/root/my77admin/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14) │
│││ www >     at Handshake.ErrorPacket (/root/my77admin/node_modules/mysql/lib/protocol/sequences/Handshake.js:123:18)│
│││ www >     at Protocol._parsePacket (/root/my77admin/node_modules/mysql/lib/protocol/Protocol.js:291:23)│
│││ www >     at Parser._parsePacket (/root/my77admin/node_modules/mysql/lib/protocol/Parser.js:433:10)    │
│││ www >     at Parser.write (/root/my77admin/node_modules/mysql/lib/protocol/Parser.js:43:10) │
│││ www >     at Protocol.write (/root/my77admin/node_modules/mysql/lib/protocol/Protocol.js:38:16)        │
│││ www >     at Socket.<anonymous> (/root/my77admin/node_modules/mysql/lib/Connection.js:88:28)│
│││ www >     at Socket.<anonymous> (/root/my77admin/node_modules/mysql/lib/Connection.js:526:10)          │
│││ www >     at Socket.emit (node:events:390:28)         │
│││ www >     at addChunk (node:internal/streams/readable:324:12)         │
│││ www >     --------------------  │
│││ www >     at Protocol._enqueue (/root/my77admin/node_modules/mysql/lib/protocol/Protocol.js:144:48)    │
│││ www >     at Protocol.handshake (/root/my77admin/node_modules/mysql/lib/protocol/Protocol.js:51:23)    │
│││ www >     at Connection.connect (/root/my77admin/node_modules/mysql/lib/Connection.js:116:18)          │
│││ www >     at Timeout.handleDisconnect [as _onTimeout] (/root/my77admin/routes/products_listing.js:19:14)          │
│││ www >     at listOnTimeout (node:internal/timers:568:17)   │
│││ www >     at processTimers (node:internal/timers:510:7) {  │
│││ www >   code: 'ER_ACCESS_DENIED_ERROR',    │
│││ www >   errno: 1045, │
│││ www >   sqlMessage: "Access denied for user ''@'localhost' (using password: NO)",│
│││ www >   sqlState: '28000',      │
│││ www >   fatal: true

我该怎么办? 我可以确认第一个连接正常。但几秒钟后它开始循环错误

【问题讨论】:

    标签: mysql express


    【解决方案1】:
    var mysql = require('mysql')
    var connection = mysql.createPool({
      host: "localhost",
      user: "root",
      password: "",
      database: "dbname",
      port : "3306"
    })
    connection.getConnection((err, connection) => {
        if (err) {
            if (err.code === 'PROTOCOL_CONNECTION_LOST') {
                console.error('Database connection was closed.')
            }
            if (err.code === 'ER_CON_COUNT_ERROR') {
                console.error('Database has too many connections.')
            }
            if (err.code === 'ECONNREFUSED') {
                console.error('Database connection was refused.')
            }
        }
        if (connection) connection.release()
        return
    })
    module.exports = connection
    

    示例:https://github.com/vishalims095/nodeJS_Mysql/blob/developer/src/Modules/connection.js

    【讨论】:

    • 我在网上阅读了许多教程并试图了解 createConnection 和 createPool 之间的区别。在我将 mycode 更改为 createPool 后,所有问题都神奇地解决了。想知道更多。谢谢顺便说一句
    • 谢谢Hong Earnest,在多次搜索得到这个解决方案后,我在用mysql实现节点时遇到了很多次同样的问题。
    • 我认为你需要解决另一个问题,我的服务器不断崩溃,我的会话 cookie 根本没有存储,但这也是由于我没有使用护照等包。
    猜你喜欢
    • 2017-03-21
    • 2018-02-22
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 2015-10-07
    相关资源
    最近更新 更多