Bad handshake或ECONNRESET Azure Mysql Nodejs

已经有类似的报道,但是我不能解决这个问题。

我有一个express.js应用程序使用KNEX连接到Azure托pipe的MySQL数据库。

我可以完全从控制台命令或MySQL工作台连接到数据库。

但是,没有办法从我的节点应用程序实现相同。

我的连接对象是相同的:

config.knex = require('knex')({ client: 'mysql', connection: { host: 'wineserver.mysql.database.azure.com', user: 'BurgerAndGreenBeans@wineserver', password: 'FromageDeChevre', database: 'gdpr', insecureAuth: true }, pool: { min: 0 }, debug: ['ComQueryPacket'] }); 

每次我启动应用程序,我得到一个错误或另一个:

#1

 Unhandled rejection Error: read ECONNRESET at exports._errnoException (util.js:1050:11) at TCP.onread (net.js:582:26) -------------------- at Protocol._enqueue (C:\Projects\gdpr\node_modules\mysql\lib\protocol\Protocol.js:141:48) at Protocol.handshake (C:\Projects\gdpr\node_modules\mysql\lib\protocol\Protocol.js:52:41) at Connection.connect (C:\Projects\gdpr\node_modules\mysql\lib\Connection.js:130:18) at C:\Projects\gdpr\node_modules\knex\lib\dialects\mysql\index.js:106:18 at Promise._execute (C:\Projects\gdpr\node_modules\bluebird\js\release\debuggability.js:300:9) at Promise._resolveFromExecutor (C:\Projects\gdpr\node_modules\bluebird\js\release\promise.js:483:18) at new Promise (C:\Projects\gdpr\node_modules\bluebird\js\release\promise.js:79:10) at Client_MySQL.acquireRawConnection (C:\Projects\gdpr\node_modules\knex\lib\dialects\mysql\index.js:104:12) at Object.create (C:\Projects\gdpr\node_modules\knex\lib\client.js:239:16) at Pool._createResource (C:\Projects\gdpr\node_modules\generic-pool\lib\generic-pool.js:354:17) at Pool.dispense [as _dispense] (C:\Projects\gdpr\node_modules\generic-pool\lib\generic-pool.js:314:10) at Pool.acquire (C:\Projects\gdpr\node_modules\generic-pool\lib\generic-pool.js:436:8) at C:\Projects\gdpr\node_modules\knex\lib\client.js:289:19 at Promise._execute (C:\Projects\gdpr\node_modules\bluebird\js\release\debuggability.js:300:9) at Promise._resolveFromExecutor (C:\Projects\gdpr\node_modules\bluebird\js\release\promise.js:483:18) at new Promise (C:\Projects\gdpr\node_modules\bluebird\js\release\promise.js:79:10) 

进程使用退出码0结束

要么

#2

 Unhandled rejection Error: ER_HANDSHAKE_ERROR: Bad handshake at Handshake.Sequence._packetToError (C:\Projects\gdpr\node_modules\mysql\lib\protocol\sequences\Sequence.js:52:14) at Handshake.ErrorPacket (C:\Projects\gdpr\node_modules\mysql\lib\protocol\sequences\Handshake.js:103:18) at Protocol._parsePacket (C:\Projects\gdpr\node_modules\mysql\lib\protocol\Protocol.js:280:23) at Parser.write (C:\Projects\gdpr\node_modules\mysql\lib\protocol\Parser.js:75:12) at Protocol.write (C:\Projects\gdpr\node_modules\mysql\lib\protocol\Protocol.js:39:16) at Socket.<anonymous> (C:\Projects\gdpr\node_modules\mysql\lib\Connection.js:103:28) at emitOne (events.js:96:13) at Socket.emit (events.js:191:7) at readableAddChunk (_stream_readable.js:178:18) at Socket.Readable.push (_stream_readable.js:136:10) at TCP.onread (net.js:561:20) -------------------- at Protocol._enqueue (C:\Projects\gdpr\node_modules\mysql\lib\protocol\Protocol.js:141:48) at Protocol.handshake (C:\Projects\gdpr\node_modules\mysql\lib\protocol\Protocol.js:52:41) at Connection.connect (C:\Projects\gdpr\node_modules\mysql\lib\Connection.js:130:18) at C:\Projects\gdpr\node_modules\knex\lib\dialects\mysql\index.js:106:18 at Promise._execute (C:\Projects\gdpr\node_modules\bluebird\js\release\debuggability.js:300:9) at Promise._resolveFromExecutor (C:\Projects\gdpr\node_modules\bluebird\js\release\promise.js:483:18) at new Promise (C:\Projects\gdpr\node_modules\bluebird\js\release\promise.js:79:10) at Client_MySQL.acquireRawConnection (C:\Projects\gdpr\node_modules\knex\lib\dialects\mysql\index.js:104:12) at Object.create (C:\Projects\gdpr\node_modules\knex\lib\client.js:239:16) at Pool._createResource (C:\Projects\gdpr\node_modules\generic-pool\lib\generic-pool.js:354:17) at Pool.dispense [as _dispense] (C:\Projects\gdpr\node_modules\generic-pool\lib\generic-pool.js:314:10) at Pool.acquire (C:\Projects\gdpr\node_modules\generic-pool\lib\generic-pool.js:436:8) at C:\Projects\gdpr\node_modules\knex\lib\client.js:289:19 at Promise._execute (C:\Projects\gdpr\node_modules\bluebird\js\release\debuggability.js:300:9) at Promise._resolveFromExecutor (C:\Projects\gdpr\node_modules\bluebird\js\release\promise.js:483:18) at new Promise (C:\Projects\gdpr\node_modules\bluebird\js\release\promise.js:79:10) Process finished with exit code 0 

这似乎是Node和Azure的mysql服务器之间的一种不兼容。

有没有人经历过相同的?

类似的问题: 在npm / mysql中连接到MySQL的Azure数据库 。 正如@Gary Liu指出的那样,你可以使用pull 1730来解决这个问题。

请修改package.json为:

 "dependencies": { "knex": "^0.13.0", "mysql": "git://github.com/mysqljs/mysql#e3e123e9af7c0829a6c1417d911572a75b4a5f95" } 

然后运行npm install来安装这个版本。