node.js - 将 mongoose 模型包装到自己的 API 有意义吗?

标签 node.js mongodb mongoose node-mongodb-native

我试图了解创建自己的 API 来使用 Mongoose 模型是否有意义?

假设我们有简单的 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);

对于抽象应用程序,用户模型应该具有“创建”、“删除”、“更新”、“查找”、“身份验证”等方法。所以我有两种方法来达到这个目的:

  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 的方法。

请告诉我哪种方法对于 Mongoose 模型来说更好?

最佳答案

Mongoose 模型具有 native createupdatefind 方法,因此如果您尝试添加这些方法,方法一就会破坏 Mongoose。

您可以使用方法二(这对我来说感觉很困惑),但使用现有的 Mongoose 方法作为您的提供程序 API 模式并仅添加您需要的未通过静态函数原生提供的方法可能会更干净。或者添加您自己的全套方法,这些方法的名称使用唯一的前缀(例如 my_createmy_update 等)。

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

关于node.js - 将 mongoose 模型包装到自己的 API 有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16683260/

相关文章:

mongoose - Mongoose 验证和使用 express-validator 有什么区别

mongodb - 问题连接到 MongoDB 集合

node.js - npm 安装返回 "TypeError: Cannot convert undefined or null to object"

javascript - 如何将mac地址发送到node api服务?我需要 Mikrotik API

mongodb - 更新 MongoDB 中的 _id 字段

python - 如何使用 pymongo 在 Mongodb 中进行正则表达式搜索?

javascript - 使用提供的演示设置 Mongoose 不起作用

node.js - 导出所需的相同对象会使 Mocha 感到困惑

javascript - 在 node.js 'vm' 模块中运行多个并发脚本

Mongodb:高获取数据库锁