2017-06-13 53 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