MySQL disconnect fail in node.js by jugglingDB
Node.js 目前透過社群的力量,目前已經擁有許多第三方連接 database 的模組,我們可以透過這些模組輕易的連街上 database, 在這邊我們選用了 jugglingDB 作為開發用的 ORM 模組。
jugglingDB 包含許多不同種類的 database adapter 提供開發者參考。
這邊我們使用的是 node.js mysql 的連接方法,當然也是要和 jugglingDB 串接,程式碼如下。
Schema = require("jugglingdb").Schema db = new Schema("mysql", database: "myapp_test" username: "user" password: "user1234" ) db.client.end()
當我們執行的時候卻會發現,錯誤資訊出現如下
Error: Cannot enqueue Query after invoking quit.
at Protocol._validateEnqueue (/Users/caesarchi/workspace/clonn/node-module-example/jugglingdb/node_modules/jugglingdb-mysql/node_modules/mysql/lib/protocol/Protocol.js:142:16)
經過一段時間終於找到解決方案
Solution
一開始以為是 apdater 的問題,導致會產生這個問題,最後發現主要是 flow control 的問題,也許你看修改後的程式碼就可以更為清楚
Schema = require("jugglingdb").Schema db = new Schema("mysql", database: "myapp_test" username: "user" password: "user1234" ) db.client.query('SELECT 1 + 1 AS solution', (err, rows, fields) -> if err throw err console.log('The solution is: ', rows[0].solution) db.client.end() )
是的我們透過這樣子,就可以把 connection 停止,是不是很神奇呢?這邊主要就是執行這段功能,回應結果如下,
The solution is: 2
酷,終於達到我們要的結果,根據 flow control,當資料庫要結束,必須要在 query 完成之後,不然會導致錯誤訊息發生。當然如果不需要連線的話,就也不需要 createConnection ,這邊就是單純的 flow control 問題,順利解決這個問題。
當我們開發 node.js 的時候,很多時間都會遇到 flow control 問題,說不定到了 ES6 會幫我們解決許多這類的問題,日子應該就在不久的時候了。
留言
張貼留言