Новый шаблон Hapi.js REST сервера



Я уже фигачил пачку статей про REST сервер на hapi. Но с тех пор прошло много времени. Обновились модули, обновился мой опыт. Вот на основе нового опыта я и собрал новый шаблон, с ещё более переиспользуемым кодом и с обновлёнными модулями.

Что изменилось?

  • Перешел с hapi 17.8 на @hapi/hapi 19.1
  • Это потянуло необходимость перехода всех остальных модулей, которые переехали в новый неймспейс @hap: @hapi/boom", @hapi/inert, @hapi/joi, @hapi/vision
  • Схемы ответа уехали из роутов в отдельные модули, чтобы их можно было комбинировать и переиспользовать
  • Константы уехали из моделй в отдельные модули, чтобы опять ж их можно было переиспользовать
  • Добавил простенький JSON логгер, чтобы можно было фигачить логи в эластик

Проект: https://gitlab.com/hololoev/hapijs_template

Как использовать?

  • Клонируем репозиторий: git clone https://gitlab.com/hololoev/hapijs_template.git
  • Ставим пакеты: npm install
  • Копируем конфиг: cp config_example.js config.js
  • Инициалищируем базу данных: npm run dbinit
  • Запускаем сервер: node server.js
  • Сваггер документация расположена по адресу: http://0.0.0.0:3030/api/documentation

Генератор автотестов

Генератор автотестов запускается только на свежеинициализированной базе данных:

rm db -r && npm run dbinit &node server.js

Только после этого запускаем тесты (сервер должен быть запущен!):

npm test

hapi autotest autogenerator

Чтобы тесты работали корректно нужно качественно описать все схемы запросов и ответо, а так же дефолтные данные в ./src/models/*.json.

Если нужно выключить какой-либо роут из тестов, вешаем тег "noTest", например:

module.exports = {
  method: 'DELETE',
  path: '/api/auth',
  options: {
    handler: response,
    description: 'Destroy current auth token',
    tags: [ 'api', 'noTest' ],
    auth: 'token',
    validate: {
      headers: commonSchemes.authHeaders
    },
    response: { schema: commonSchemes.responseWrapper() }
  }
};

Сообщество: AWS

Комментариев(0)


Всего: 0 комментариев на 0 страницах

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



Сообщества