Node.js的处理与异步“需要”返回(节点ORM)(Handling Node.js Async

2019-09-17 08:21发布

我使用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" }
      });
    });

问题是,我想放人(和所有其他型号为此事)在外部包括。

如果我做这样的事情:

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

我不能使用DB变量里面,因为它只是在回调函数为orm.connect的上下文存在()。 我不能移动orm.connect的要求(person.js),并做模型信息一module.export,因为在父脚本中,需要将发生,那么模型将不会对下一行准备,因为它不是等待回调。 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 

我觉得有这样做的明显的方式。

Answer 1:

或许可以使person.js出口到一个函数,并传入分贝? 像这样:

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


Answer 2:

如果你把你已经张贴在这里的功能的代码,你可以导出和person.js使用它(或者反过来)



Answer 3:

节点ORM也不是那么好。 节点MySQL驱动程序具有本机实现,但节点ORM没有。 你可以使用光ORM作为包装到节点的MySQL。 你会得到真正的灵活模式。

https://npmjs.org/package/light-orm和https://npmjs.org/package/mysql



文章来源: Handling Node.js Async Returns with “require” (Node ORM)