我有猫鼬模型定义如下:
用户.js
module.exports = function() {
var mongoose = require('mongoose');
// Creates a new Mongoose Schema object
var Schema = mongoose.Schema;
// Collection to hold users
var UserSchema = new Schema({
username: { type: String, required: true },
password: { type: String, required: true },
},{
versionKey: false
}
);
// Creates the Model for the User Schema
var User = mongoose.model('User', UserSchema);
var getUserById = function(id, callback) {
User.findById(id, callback);
}
var getUserByUsername = function(username, callback) {
var query = {username: username};
User.findOne(query, callback);
}
return {
getUserById: getUserById,
getUserByUsername: getUserByUsername
}
}()
基本上我正在返回一个用户模型的客户端可以使用的公共接口。IE 我的用户路线抓取模型,可以调用定义的两个公共方法,仅此而已。我这样做是为了从我的路线中抽象出我正在使用 mongodb/mongoose 的事实。我很可能会在某个时候拥有一个与 postgres 对话的用户模型,或者可能只是切换到 postgres。因此,我不想查看代码中调用猫鼬特定函数的路由方法中的位置。
这是我的问题。当我需要一个我调用的模块时,代码中的大多数地方
var someUtil = require('./someUtil');
但是,如果我对猫鼬模型不止一次这样做,我会收到一个错误,指出它不能被定义两次。
var User = require('./user'); // Cannot put this in more than one file without getting an error.
是否有更好的方法来编写 user.js 文件,以便我可以为我的 User 模型提供一个公共接口,但只定义一次 Schema,以便我可以在该文件上多次调用 require ?