2011-05-14 59 views
1

我試圖使用db-mysql庫從node.js連接到MySQL數據庫。一切工作都很好用示例代碼,但現在我試圖寫一個簡單的ORM。在node.js中訪問MySQL數據庫 - 內部斷言失敗

這是我的代碼:

require.paths.unshift('/usr/lib/node_modules'); // default require.paths doesn't include this 

function Model() { 
    this.database = null; 
} 

Model.prototype.getDB = function(callback) { 
    if (this.database != null) 
    callback(this.database); 
    else { 
    console.log("Connecting to database..."); 
    this.database = require("db-mysql").Database({ 
     "hostname" : "localhost", 
     "user"  : "root", 
     "password" : "pass", 
     "database" : "miku", 
    }).on("ready", function() { 
     console.log("Database ready, saving for further use."); 
     this.database = this; 
     callback(this); 
    }); 
    } 
} 

exports.Model = Model; 

而且簡單的代碼我用來測試:

orm = require('./orm'); 
model = new orm.Model(); 
model.getDB(function (db) { console.log("callback'd"); }); 

它看起來很好(至少對我來說),但Node.js的失敗內部斷言:

Connecting to database... 
node: /usr/include/node/node_object_wrap.h:61: void node::ObjectWrap::Wrap(v8::Handle<v8::Object>): Assertion `handle->InternalFieldCount() > 0' failed. 
Przerwane (core dumped) 

經過進一步調查,如果在創建數據庫對象之前/期間失敗。我不知道爲什麼會發生這種情況。我首先認爲這是因爲我使用的是git node.js版本,但是當前版本(v0.4.7)也失敗了。

我想在node.js代碼中找到這個問題,目前沒有成功。

回答

3

哦,這是我努力的失敗。在JavaScript世界中似乎有Python背景是不受歡迎的;)。

數據庫初始化應該是這樣的:

db = require("db-mysql"); 
new db.Database({ 
    "hostname" : "localhost", 
    "user"  : "root", 
    "password" : "pass", 
    "database" : "miku", 
}).on("ready", function() { 
    console.log("Database ready, saving for further use."); 
    this.database = this; 
    callback(this); 
}).connect(); 

所以,我基本上忘了打電話給newconnect()

+1

另一個小問題:對象初始值設定項中的尾隨逗號(如''database':「miku」,})''雖然有些解釋器允許它們滑動但是「正式」非法。最好不要使用它們。 – 2011-05-15 18:45:05

+0

謝謝,我不知道!在這裏JavaScript看起來有點奇怪,許多語言都允許它們(我見過很多推薦它們的風格指南)。 – 2011-05-15 18:53:56

+1

當我們終於使用Javascript2時,它們將被允許,但是例如,在包括IE8在內的很多瀏覽器中,'[1,2,]。length === 3'是真的。參見http://ejohn.org/blog/bug-fixes-in-javascript-2/ – 2011-05-15 19:15:16