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");

orm.connect() のコールバック関数のコンテキストにのみ存在するため、その中で db 変数を使用することはできません。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 に答える