4

我正在使用 Node.js ORM 模块:https ://github.com/dresende/node-orm

我可以通过这样做来创建一个模型:

    var orm = require("orm");
    var db = orm.connect("creds", function (success, db) {
        if (!success) {
            console.log("Could not connect to database!");
            return;
        }

      var Person = db.define("person", {
        "name"   : { "type": "string" },
        "surname": { "type": "string", "default": "" },
        "age"    : { "type": "int" }
      });
    });

问题是我想将 Person (以及所有其他模型)放在外部包含中。

如果我做这样的事情:

   require("./models/person.js");

我不能在其中使用 db 变量,因为它只存在于 orm.connect() 的回调函数的上下文中。我无法将 orm.connect 移动到 require (person.js) 并为模型信息执行 module.export,因为在父脚本中,require 会发生,然后下一行模型将无法准备好,因为它不等待回调。IE

//person.js
// db and orm get defined up here as before
Person = {}; // code from above, with the define and etc. 
Module.exports = Person;
//app.js 
person = require("./models/person.js");
console.log(person); // returns undefined, connect callback isn't done yet 

我觉得有一种明显的方法可以做到这一点。

4

3 回答 3

7

也许可以将person.js的导出变成一个函数,并传入db?像这样:

//app.js
var orm = require("orm");
var db = orm.connect("creds", function (success, db) {
    if (!success) {
        console.log("Could not connect to database!");
        return;
    }

  var Person = require("./models/person.js")(db);
});

//person.js
module.exports = function(db){
    return db.define("person", {
        "name"   : { "type": "string" },
        "surname": { "type": "string", "default": "" },
        "age"    : { "type": "int" }
    });
}
于 2012-05-19T23:35:24.947 回答
1

如果您将此处发布的代码放入函数中,则可以将其导出并在 person.js 中使用(或相反)

于 2012-05-19T23:31:30.280 回答
1

Node-orm 不是很好。Node-mysql 驱动程序具有本机实现,但 node-orm 没有。您可以使用 light-orm 作为 node-mysql 的包装器。您将获得非常灵活的模型。

https://npmjs.org/package/light-ormhttps://npmjs.org/package/mysql

于 2014-01-28T13:41:35.383 回答