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

Обработка ошибок

Наберите в браузере адрес http://localhost:3000/bla-bla-bla или замените в this.render('index') на несуществующий шаблон this.render('bla-bla-bla'). В каждом случае вы увидите, как сервер реагирует на ошибки.

Areto blog error page 400

Подключение перехвата

Чтобы перехватывать и обрабатывать подобные ситуации, добавьте в конфиг секцию router, в которой укажите контроллер (по умолчанию DefaultController) и действие (по умолчанию error), отвечающие за обработку ошибок.

config/default.js

module.exports = {
  ...
  'errors': {
    // Controller: require('../controllers/DefaultController'),
    // action: 'error'
  }
};

Действие над ошибкой

В контроллере определите метод actionError, который будет вызываться для обработки ошибки.

controllers/DefaultController.js

actionError () {
  // возвращаемый HTTP-код ошибки (404, 403, 500 и т.д.)
  this.setStatus(this.err.status);
  // выбираем шаблон в соответствии с кодом ошибки
  switch (this.err.status) {
    case 403:
    case 404:
      this.render(this.err.status);
      break;
    default:
      this.render(500);
}

Представление ошибок

Для статусов ошибок 403, 404, 500 создайте шаблоны, которые будут отображаться пользователю.

views/default/403.ejs

<% layout(view.get('_layouts/main')) -%>
<div class="row">
  <div class="col-sm-8 col-sm-offset-2 col-lg-6 col-lg-offset-3">
    <div class="error-page">
      <div class="text-center">
        <h1 class="text-danger">Доступ запрещен</h1>
        <p>Доступ разрешен только для авторизованных пользователей.</p>
      </div>
    </div>
  </div>
</div>
Areto blog error page 404

views/default/404.ejs

<% layout(view.get('_layouts/main')) -%>
<div class="row">
  <div class="col-sm-8 col-sm-offset-2 col-lg-6 col-lg-offset-3">
    <div class="error-page">
      <div class="text-center">
        <h1 class="text-danger">Страница не найдена </h1>
        <p>Мы не нашли страницу, которую вы запрашивали.</p>
      </div>
    </div>
  </div>
</div>
Areto blog error page 500

views/default/500.ejs

<% layout(view.get('_layouts/main')) -%>
<div class="row">
  <div class="col-sm-8 col-sm-offset-2 col-lg-6 col-lg-offset-3">
    <div class="error-page">
      <div class="text-center">
        <h1 class="text-danger">Ошибка сервера</h1>
        <p>Мы работаем над устранением данной проблемы.</p>
      </div>
    </div>
  </div>
</div>

Теперь повторите ошибки из начала главы и увидите, как изменился ответ сервера.