Строим блог на Areto фреймворк

Базовый контроллер

Удобно иметь общие методы для контроллеров модуля собранными в единственном классе. В админке в этой роли выступает базовый контроллер, описываемый в файле module/admin/component/Controller.js. Остальные контроллеры модуля наследуются от него прямо и косвенно.

Директория components внутри модуля (приложения) используется для размещения различных дополнительных классов, использующихся моделями, контроллерами или представлениями.

module/admin/component/Controller.js

const Base = require('areto/base/Controller');
module.exports = class Controller extends Base {
  // place methods here
};

Метод getRefUrl возвращает адрес предыдущей страницы. Адрес извлекается из заголовка запроса или POST-параметра.

module/admin/component/Controller.js

getModel (params, cb) {
  params = params = Object.assign({
    'ModelClass': this.getModelClass(),
    'id': this.getQueryParam('id')
  }, params);
  if (!MongoHelper.isValidId(params.id)) {
    return this.throwNotFound();
  }
  let query = params.ModelClass.findById(params.id).with(params.with);
  async.waterfall([
    cb => query.one(cb),
    model => model ? cb(model) : this.throwNotFound()
  ], err => this.throwError(err));
}

Метод backToRef переадресует текущий запрос на адрес, полученный из POST запроса или аргумента url.

module/admin/component/Controller.js

getRefUrl () {
  let ref = this.isGet()
    ? this.getHeader('referrer')
    : this.getBodyParam('referrer');
  return ref ? ref : '';
}