处理Node.js使用“require”(节点ORM)的asynchronous返回
我正在使用Node.js ORM模块: https : //github.com/dresende/node-orm
我可以通过这样做来创build一个模型:
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");
我不能在里面使用dbvariables,因为它只存在于orm.connect()的callback函数的上下文中。 我不能移动orm.connect到require(person.js)并为模型信息做一个module.export,因为在父脚本中,require会发生,然后模型将不会被下一行准备好,因为它不在等待callback。 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
我觉得有一个明显的方法来做到这一点。
也许可以使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" } }); }
如果你把你在这里发布的代码放在一个函数中,你可以导出它,并在person.js中使用它(或者反过来)
Node-orm不太好。 Node-mysql驱动程序具有本地实现,但node-orm不具有本地实现。 你可以使用light-orm作为包装到node-mysql。 你会得到真正灵活的模型。
https://npmjs.org/package/light-orm和https://npmjs.org/package/mysql