我對貓鼬模型定義如下:呼叫需要在貓鼬模型不止一次
user.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
}
}()
基本上我返回一個公共的接口,用戶模型的客戶端可以使用。 I.E.我的路線爲用戶抓住模型,並且可以調用定義的兩個公共方法,而不是其他方法。我這樣做是爲了從我的路線中抽象出我正在使用的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的文件,這樣我可以提供一個公共接口,以我的用戶模型,但只定義的模式一度讓我可以調用需要一個以上的時間在該文件?
AFAIK節點緩存需要模塊的結果,因此上述函數不應該運行兩次。除此之外,沒有理由將代碼封裝在自執行函數中,只需公開方法,如'exports.getUserById = getUserById; // etc'。 –