解决NodeJS模型中的循环依赖问题

我有两个模型(使用BookshelfJS或BackboneJS,没关系): modelAmodelBmodelA需要modelBmodelB需要modelA

最初,我有:

 // modelA var Bookshelf = require('bookshelf); var modelB = require('./modelB'); var modelA = Bookshelf.Model.extend({}); module.exports = modelA; // modelB var Bookshelf = require('bookshelf); var modelA = require('./modelA); var modelB = Bookshelf.Model.extend({}); module.exports = modelB; 

然后我在这里阅读Bookshelf.plugin('register') 。 所以我改变了我的代码:

 // modelA var Bookshelf = require('bookshelf); var modelB = Bookshelf.model('modelB'); var modelA = Bookshelf.Model.extend({}); Bookshelf.model('modelA', modelA); // modelB var Bookshelf = require('bookshelf); var modelA = Bookshelf.model('modelA'); var modelB = Bookshelf.Model.extend({}); Bookshelf.model('modelB', modelB); 

在情况1中,有一个循环依赖关系,在情况2中被修复了。但是现在在情况2中,当modelA被引导时, modelB还没有被定义,所以Bookshelf.model('modelB')不存在。

我该怎么办?

好的,所以修复很容易。 这里是任何有兴趣的人。 require使用.extend({})的函数中的模型来使用它。 例如:

 // modelA (which requires modelB somewhere inside) var Bookshelf = require('bookshelf); var modelA = Bookshelf.Model.extend({ tableName : 'modelA', someFunc : function() { var modelB = Bookshelf.model('modelB'); // Now use modelB here } }); 

问题是modelB在引导时没有引导。 因此,要求页面顶部的modelB是不可能的。 相反,你需要在函数内部。 到那时,你的应用程序正在运行,所有的东西都被引导。