Задать вопрос
dmc1989
@dmc1989

Как передать модель Mongoose?

Пытаюсь сделать общий контроллер для моделей и для каждой добавлять новые возможности, но получаю несколько ошибок, причем не понимаю что делаю не так.

Проверял как должна выглядеть нормальная модель, но когда передаю через конструктор получается что-то другое:
Controller constructor function model(doc, fields, skipId) {
      model.hooks.execPreSync('createModel', doc);
      if (!(this instanceof model)) {
        return new model(doc, fields, skipId);
      }
      Model.call(this, doc, fields, skipId);
    }


Когда чекаю ID то получаю еще одну ошибку:
TypeError: Project.checkId is not a function

Пример кода:
const mongoose = require('mongoose');
const ProjectModel = require('../models/project');

class Controller {
  constructor(model) {
    console.log("Controller constructor", model); // ТУТ НЕ МОДЕЛЬ, А Controller constructor function model
    if (!model || !model.collection.name) {
      throw new Error(404, "Controller need mongoose model in constructor!");
    }
    this.name = model.collection.name;
    this.model = model;
  }

  static checkId(id) {
    return mongoose.Types.ObjectId.isValid(id.toString());
  }
}

class ProjectController extends Controller {
  constructor(name, model) {
    super(model)
    this.name = name;
  }

  static create(fields) {
    this.checkFields(fields);

    const newProject = new ProjectModel({
      name: fields.name,
      description: fields.description,
      slides: []
    });

    return newProject.save();
  }
}

module.exports = Project = new ProjectController('Project', ProjectModel);
  • Вопрос задан
  • 126 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽