【发布时间】:2012-10-13 18:28:47
【问题描述】:
我有一个名为 UserProvider 的模块,看起来像这样
var UserProvider = function(db) { ... }
UserProvider.prototype.createUser = function(email, password, callback) { ... }
UserProvider.prototype.findUserByEmail = function(email, callback) { ... }
...
exports.UserProvider = UserProvider;
还有一个名为 ModelProvider 的模块,看起来像这样
var UserProvider = require('./user').UserProvider;
var ModelProvider = function() {
...
this.User = new UserProvider(db);
}
exports.ModelProvider = ModelProvider;
但是this.User = new UserProvider(db); 行不允许我访问包含ModelProvider 模块的主模块中的UserProvider 对象。
当我尝试调用它时:
var ModelProvider = require('./model/model').ModelProvider;
var Model = new ModelProvider();
Model.User.findUserByEmail(email, function() {...});
它给出了以下错误:
TypeError: Object function Model(doc, fields, skipId) {
if (!(this instanceof Model))
return new Model(doc, fields, skipId);
model.call(this, doc, fields, skipId);
} has no method 'findUserByEmail'
我假设我缺少一些 JavaScript 技巧来揭露这一点?
谢谢!
【问题讨论】:
-
我认为您还需要在主模块中要求用户模块,或者还将
UserProvider添加到模型模块中的exports对象中。 -
对,但是实例化用户模型的实例取决于数据库连接对象,所以我希望Model模块在启动时对其进行初始化,然后将其暴露出来。
-
所以大概你的主模块中有
var model = new ModelProvider()之类的东西,如果你访问model.User你会得到什么? -
用错误信息编辑的原始问题
-
看起来您在那里发生了某种名称冲突,错误似乎表明您有一个名为
Model的类,它可能与您创建的ModelProvider实例混淆了/跨度>
标签: javascript node.js express