Пытаюсь сделать общий контроллер для моделей и для каждой добавлять новые возможности, но получаю несколько ошибок, причем не понимаю что делаю не так.
Проверял как должна выглядеть нормальная модель, но когда передаю через конструктор получается что-то другое:
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);