1

我试图理解为使用 Mongoose 模型制作自己的 API 是否有意义?

假设我们有一个简单的 Mongoose 用户模型:

var UserSchema = new mongoose.Schema({
  email: { type: 'string', required: true, unique: true, lowercase: true },
  password: { type: 'string', required: true },
  name: {type: 'string'}
});

var UserModel = mongoose.model('User', UserSchema);

对于一个抽象的应用程序,用户模型应该有诸如'create'、'delete'、'update'、'find'、'authenticate'等方法。所以我有两种方法来实现这个目的:

  1. 将这些方法包含到 Mongoose 模型中,如下所示:

    UserSchema.static('create', function (data, callback) {
         var user = new User(data);
         user.save(function (err) {
             if (err) return callback(err);
    
             return callback(null, user);
        });
     });
    
  2. 在自定义 User 类中包装一个方法,如下所示:

    UserProvider = function(){};
    
    UserProvider.prototype.create = function(data, callback) {
         var user = new User(data);
         user.save(function (err) {
             if (err) return callback(err);
    
            return callback(null, user);
         });
     };
    

在第一个中,我可以像这样创建一个新用户:

UserModel.create({name: 'test'}, function (err, user) {
    if (err) {// do something}
});

在第二个中,我可以创建一个新的类似:

var userProvider= new UserProvider();
userProvider.create({name: 'test'}, function (err, user) {
     if (err) {// do something} 
});

虽然这些方法看起来很相似,但我觉得我需要选择在未来不会破坏 Mongoose API。

请告诉我哪种方法更适合猫鼬模型?

4

1 回答 1

0

Mongoose 模型具有原生createupdatefind方法,因此如果您尝试添加这些方法,则方法一已经破坏了 Mongoose。

您可以使用方法二(这对我来说感觉很乱),但是使用现有的 Mongoose 方法作为您的提供者 API 模式并添加您需要的那些不是通过静态函数本机提供的方法可能更干净。或者添加您自己的完整方法集,这些方法的名称使用唯一前缀(例如my_createmy_update等)。

但是请确保您清楚为什么要添加抽象层,因为增加的间接性和复杂性并不是免费的。

于 2013-05-24T13:24:02.977 回答