在猫鼬模式中将操作用作方法是一种好习惯

时间:2019-01-14 06:08:52

标签: node.js mongodb express mongoose nosql

我使用猫鼬已有一段时间了。我想知道我是对还是错,什么是最佳实践。

我正在做的是:

/ * myModel.js * /

const mongoose = require('mongoose'),
      Schema = mongoose.Schema;

// 1.创建了我的模式

const mySchema = new Schema({
  name: String,
  age: Number
});

// 2.要使用提取操作 //但是我已经为此创建了方法

mySchema.methods.fetchById = async function(){
  return await myModel.findById(this._id);
}

// 3.创建模型

module.exports = myModel = mongoose.model('myModel', mySchema);

/ * myController.js * /

const User = require('./myModel');

router.get('user/:id', async (req, res, next) => {
  try {
    let user = new User({
      _id: req.params.id
    })
    res.status(200).json(await user.fetchById());
  } catch (err) {
    next(err);
  }
})

1 个答案:

答案 0 :(得分:0)

这不是创建实例方法以获取实例对象的好习惯,因为:

  1. 这很混乱,容易出错
  2. 这违反了 Mongoose API设计(请参见1)
  3. 您必须创建一个新对象,它需要更多的内存分配
  4. 在这种情况下,它需要更多的代码行,您需要学习新的API,可能会引入错误,并且不会增加任何改进

您应该只在控制器中使用静态方法findById

const User = require('./myModel');

router.get('user/:id', async (req, res, next) => {
  try {
    res.status(200).json(await User.findById(req.params.id));
  } catch (err) {
    next(err);
  }
});