【问题标题】:Accessing MySQL database in node.js - internal assertion fails在 node.js 中访问 MySQL 数据库 - 内部断言失败
【发布时间】:2011-08-25 11:45:41
【问题描述】:

我正在尝试使用 db-mysql 库从 node.js 连接到 MySQL 数据库。一切都适用于示例代码,但现在我正在尝试编写一个简单的 ORM。

这是我的代码:

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 代码中追踪这个问题,目前没有成功。

【问题讨论】:

    标签: javascript mysql node.js


    【解决方案1】:

    哦,是我失败了。在 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()

    【讨论】:

    • 另一个小问题:对象初始值设定项中的尾随逗号(如 '"database" : "miku",})' 是“官方”非法的,尽管一些解释器允许它们滑动。最好不要使用它们。
    • 谢谢,我不知道! JavaScript 在这里似乎有点奇怪,许多语言都允许使用它们(我已经看到许多推荐它们的样式指南)。
    • 当我们最终到达 Javascript2 时,它们将被允许,但例如,说 '[1,2,].length === 3' 在包括 IE8 在内的多种 IE 中都是正确的。见ejohn.org/blog/bug-fixes-in-javascript-2
    猜你喜欢
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 2011-05-27
    相关资源
    最近更新 更多