2017-06-13 73 views
0

连接到Azure数据库的MySQL与MySQL NPM模块时,我得到一个错误(2.13.0版本):连接到Azure数据库的MySQL在NPM/MySQL的

错误:

/Users/sascha/Desktop/azure-mysql/index.js:19 
    if (error) throw error; 
      ^
Error: ER_HANDSHAKE_ERROR: Bad handshake 
    at Handshake.Sequence._packetToError (/Users/sascha/Desktop/azure-mysql/node_modules/mysql/lib/protocol/sequences/Sequence.js:52:14) 
    at Handshake.ErrorPacket (/Users/sascha/Desktop/azure-mysql/node_modules/mysql/lib/protocol/sequences/Handshake.js:103:18) 
    at Protocol._parsePacket (/Users/sascha/Desktop/azure-mysql/node_modules/mysql/lib/protocol/Protocol.js:280:23) 
    at Parser.write (/Users/sascha/Desktop/azure-mysql/node_modules/mysql/lib/protocol/Parser.js:75:12) 
    at Protocol.write (/Users/sascha/Desktop/azure-mysql/node_modules/mysql/lib/protocol/Protocol.js:39:16) 
    at TLSSocket.ondata (_stream_readable.js:528:20) 
    at emitOne (events.js:77:13) 
    at TLSSocket.emit (events.js:169:7) 
    at readableAddChunk (_stream_readable.js:146:16) 
    at TLSSocket.Readable.push (_stream_readable.js:110:10) 
    -------------------- 
    at Protocol._enqueue (/Users/sascha/Desktop/azure-mysql/node_modules/mysql/lib/protocol/Protocol.js:141:48) 
    at Protocol.handshake (/Users/sascha/Desktop/azure-mysql/node_modules/mysql/lib/protocol/Protocol.js:52:41) 
    at Connection.connect (/Users/sascha/Desktop/azure-mysql/node_modules/mysql/lib/Connection.js:130:18) 
    at Object.<anonymous> (/Users/sascha/Desktop/azure-mysql/index.js:16:12) 
    at Module._compile (module.js:435:26) 
    at Object.Module._extensions..js (module.js:442:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:311:12) 
    at Module.runMain [as _onTimeout] (module.js:467:10) 
    at Timer.listOnTimeout (timers.js:92:15) 

代码:

var mysql = require("mysql"); 
var fs = require("fs"); 

var connection = mysql.createConnection({ 
    host: "host", 
    user: "[email protected]", 
    password: "pw", 
    database: "scheme", 
    port: 3306, 
    ssl: { 
     ca: fs.readFileSync(__dirname + "/cert.pem") 
    }, 
    insecureAuth: true 
}); 

connection.connect(); 

connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) { 
    if (error) throw error; 
    console.log('The solution is: ', results[0].solution); 
}); 

connection.end(); 

通过MySQL Workbench连接到数据库工作正常。

回答

3

这是一个已知的问题,因为我们的工程师在https://social.msdn.microsoft.com/Forums/en-US/c8fedbcc-909d-41ce-8c72-0374f76fdf82/cannot-connect-from-nodejs?forum=AzureDatabaseforMySQL处有一个分歧。

目前,我已经测试@Bradley Grainger在Cannot connect Azure Web App - NodeJS to Azure Mysql提供的解决方案。我们也可以看到https://github.com/mysqljs/mysql/commit/e3e123e9af7c0829a6c1417d911572a75b4a5f95的要点。

目前,请修改package.json为:

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

然后运行npm install安装此版本。

它应该按预期工作。

此外,请等待维护者合并此PR。

+0

感谢您的解决方法。这对我有用。我现在正在等待释放。 – skuntze