【问题标题】:Connection to MySql with Node JS and Sequelize使用 Node JS 和 Sequelize 连接到 MySql
【发布时间】:2017-07-29 00:40:08
【问题描述】:

当我尝试使用特定用户和密码从节点连接到运行在同一台机器 (debian) 上的 MySql 数据库时,我收到“拒绝访问”错误。 如果我尝试相同,使用相同的用户并且在数据库和节点中没有设置密码,一切正常。

使用密码从终端连接也可以正常工作。 我已经尝试删除用户和数据库并重新创建它们。但没有任何效果。

这是我的节点代码:

var http = require('http');
var fs = require('fs');
var Sequelize = require('sequelize')
var sequelize = new Sequelize('mysql://user:password@localhost:3306/databasename');

http.createServer(function (req, res) {
    console.dir(req.url);
    sequelize.query("SELECT @@version;").spread(function(results, metadata) {
        console.log(results);
    })

    res.writeHead(200, {'Content-Type': 'text/html'});

    res.end('ok');
}).listen(8080);

我在控制台上得到的是这样的:

Possibly unhandled Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'user'@'localhost' (using password: YES)
    at Handshake.Sequence._packetToError (/var/www/html/node/node_modules/mysql/lib/protocol/sequences/Sequence.js:30:14)
    at Handshake.ErrorPacket (/var/www/html/node/node_modules/mysql/lib/protocol/sequences/Handshake.js:67:18)
    at Protocol._parsePacket (/var/www/html/node/node_modules/mysql/lib/protocol/Protocol.js:197:24)
    at Parser.write (/var/www/html/node/node_modules/mysql/lib/protocol/Parser.js:62:12)
    at Protocol.write (/var/www/html/node/node_modules/mysql/lib/protocol/Protocol.js:37:16)
    at Socket.ondata (_stream_readable.js:555:20)
    at emitOne (events.js:101:20)
    at Socket.emit (events.js:191:7)
    at readableAddChunk (_stream_readable.js:176:18)
    at Socket.Readable.push (_stream_readable.js:134:10)
    --------------------
    at Protocol._enqueue (/var/www/html/node/node_modules/mysql/lib/protocol/Protocol.js:110:26)
    at Protocol.handshake (/var/www/html/node/node_modules/mysql/lib/protocol/Protocol.js:42:41)
    at Connection.connect (/var/www/html/node/node_modules/mysql/lib/Connection.js:81:18)
    at ConnectorManager.connect (/var/www/html/node/node_modules/sequelize/lib/dialects/mysql/connector-manager.js:314:16)
    at Object.create (/var/www/html/node/node_modules/sequelize/lib/dialects/mysql/connector-manager.js:138:19)
    at createResource (/var/www/html/node/node_modules/generic-pool/lib/generic-pool.js:258:13)
    at dispense (/var/www/html/node/node_modules/generic-pool/lib/generic-pool.js:250:9)
    at Object.me.acquire (/var/www/html/node/node_modules/generic-pool/lib/generic-pool.js:316:5)
    at CustomEventEmitter.fct (/var/www/html/node/node_modules/sequelize/lib/dialects/mysql/connector-manager.js:248:19)
    at CustomEventEmitter.<anonymous> (/var/www/html/node/node_modules/sequelize/lib/emitters/custom-event-emitter.js:24:18)

有什么线索吗?

【问题讨论】:

  • 密码是否包含可能导致在这样的 URI 中使用问题的字符?百分号、和号、加号等
  • 不,不是那样的。我对 mysqljs 进行了同样的尝试并得到了同样的错误......
  • 所以mysql -uuser -p databasename 有效(输入密码后)?
  • 是的。效果很好。在没有用户的情况下连接到。只是用户+密码失败。
  • 奇怪。我可以推荐的唯一想法是尝试使用单独的参数进行连接(记录在here,在“设置连接”下)。

标签: mysql node.js sequelize.js


【解决方案1】:

好的,问题是,package.json 不包含依赖项(mysql 或 sequelize)。我仍然不知道,为什么我可以在没有密码的情况下连接到数据库。 但现在可以了。

【讨论】:

    猜你喜欢
    • 2019-02-27
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 2018-09-18
    • 1970-01-01
    相关资源
    最近更新 更多