Настройка среды разработки Hapi.js с помощью ServBay
Hapi.js — это мощный и гибкий фреймворк для Node.js, идеально подходящий для создания приложений и API. ServBay предоставляет разработчикам Node.js удобную локальную среду с интеграцией Node.js-окружения, различными базами данных и возможностью легкой настройки web-сервера. В этом материале вы узнаете, как создать и запустить проект на Hapi.js в окружении ServBay, настроить функцию Сайты для доступа к приложению, а также подключиться к встроенным СУБД ServBay.
Что такое Hapi.js?
Hapi.js — это мощный и многофункциональный фреймворк для Node.js, разработанный Walmart Labs и предназначенный для создания приложений и сервисов. Hapi.js известен продвинутой системой плагинов, подходом, основанным на конфигурации, и встроенными возможностями безопасности, что позволяет разработчикам эффективно строить производительные и поддерживаемые веб-приложения и API.
Ключевые особенности и преимущества Hapi.js
- Система плагинов: Hapi.js обладает развитым и простым в использовании механизмом плагинов, который позволяет легко расширять функционал или разделять бизнес-логику на переиспользуемые модули.
- Конфигурация на первом месте: При проектировании приложений используется подход, ориентированный на детализированную конфигурацию — для маршрутизации, валидации, кэширования и других аспектов.
- Валидация входных данных: Встроенная библиотека Joi позволяет декларативно и безопасно проверять данные, обеспечивая их целостность.
- Богатая экосистема: Активное сообщество и обилие официальных и сторонних плагинов для типовых задач: аутентификация, авторизация, кэширование, логирование и прочее.
- Безопасность: В фреймворк интегрированы средства защиты от распространённых уязвимостей веб-приложений, включая управление CORS, валидацию данных и др.
- Логирование и отладка: Подробные журналы жизненного цикла запроса и удобные инструменты для дебага.
С помощью Hapi.js вы можете сосредоточиться на реализации бизнес-логики, а обслуживание HTTP, маршрутизация, валидация и безопасность — в надёжных руках фреймворка.
Запуск проекта Hapi.js с помощью ServBay
В этом разделе вы пошагово создадите и запустите базовое приложение на Hapi.js с помощью окружения Node.js в ServBay, а затем настроите для него доступ через функцию Сайты (обратный прокси).
Предварительные требования
Перед началом убедитесь, что:
- У вас установлен ServBay на macOS.
- В приложении ServBay активирован пакет Node.js. Это можно сделать на вкладке "Пакеты" в панели управления ServBay.
- Вы знакомы с базовой работой в терминале и знаете, как использовать npm для управления пакетами Node.js.
Создание проекта Hapi.js
Инициализация папки проекта
Откройте терминал и перейдите в рекомендуемую ServBay папку корня сайтов —
/Applications/ServBay/www
. Создайте там новую папку для проекта (например,servbay-hapi-app
) и войдите в неё:bashcd /Applications/ServBay/www mkdir servbay-hapi-app cd servbay-hapi-app
1
2
3Инициализация Node.js-проекта
Внутри папки выполните инициализацию проекта:
bashnpm init -y
1Это создаст файл
package.json
в корне вашего проекта.Установка зависимостей Hapi.js
Установите основной пакет Hapi.js:
bashnpm install @hapi/hapi
1В результате зависимость
@hapi/hapi
появится в вашемpackage.json
.Создание входного файла приложения
Находясь в корне проекта, создайте файл
server.js
со следующим содержимым для запуска простого сервера Hapi.js:javascript'use strict'; // Включить строгий режим const Hapi = require('@hapi/hapi'); const init = async () => { const server = Hapi.server({ port: process.env.PORT || 3000, // Слушать порт 3000 или указанный в переменной PORT host: 'localhost' // Слушать локальный адрес }); // Простой корневой роут server.route({ method: 'GET', path: '/', handler: (request, h) => { return 'Hello from Hapi.js powered by ServBay!'; } }); // Запуск сервера await server.start(); console.log('Server running on %s', server.info.uri); }; // Обработка неотловленных ошибок Promise Rejection process.on('unhandledRejection', (err) => { console.error(err); process.exit(1); // Завершить процесс }); // Запуск приложения, вызвав функцию init init();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33Этот код создаёт сервер на Hapi, слушающий указанный порт (по умолчанию 3000) на
localhost
; для пути/
определён обработчик GET-запроса.
Переход в режим разработки и настройка сайта ServBay
В процессе разработки вы можете запускать своё приложение на Node.js и с помощью обратного прокси ServBay делать его доступным по удобному доменному имени, а также использовать локальный SSL-сертификат.
Запуск Hapi.js-сервера для разработки
В терминале, находясь в папке
servbay-hapi-app
, используйте команду для запускаserver.js
. Для интеграции с обратным прокси ServBay, можно явно указать порт, например,8585
:bashPORT=8585 node server.js
1В терминале появится сообщение о запуске сервера на, например,
http://localhost:8585
. Оставьте окно терминала открытым — сервер работает.Настройка сайта (обратного прокси) в ServBay
Откройте приложение ServBay и перейдите на вкладку "Сайты". Нажмите "+" в левом нижнем углу для добавления нового сайта.
- Имя (Name):
ServBay Hapi Dev
(любое, для идентификации сайта в списке ServBay) - Домен (Domain):
servbay-hapi-dev.servbay.demo
(рекомендуется использовать окончание.servbay.demo
— не пересекается с внешними доменами и поддерживает локальные SSL-сертификаты ServBay) - Тип сайта (Type): выберите
Обратный прокси (Reverse Proxy)
- Проксировать на (Proxy to):
- Протокол (Protocol):
http
- IP-адрес (IP Address):
127.0.0.1
(ваш Node.js-сервер запущен локально) - Порт (Port):
8585
(тот же порт, что и при запускеnode server.js
)
- Протокол (Protocol):
Нажмите "Добавить" для сохранения. ServBay автоматически настроит web-сервер (например, Caddy или Nginx) на проксирование всех запросов к
https://servbay-hapi-dev.servbay.demo
наhttp://127.0.0.1:8585
, а также автоматически выпустит и установит SSL-сертификат для указанного домена (через локальный CA ServBay).Для более подробных инструкций по настройке сайтов в ServBay можете обратиться к официальной документации по сайтам.
- Имя (Name):
Доступ к вашему Hapi.js-приложению в браузере
Откройте в браузере адрес:
https://servbay-hapi-dev.servbay.demo
. На странице должно появиться сообщение "Hello from Hapi.js powered by ServBay!".Любые изменения в файле
server.js
(особенно в связке с инструментами типа nodemon для "горячей" перезагрузки) тут же станут видны по тому же адресу благодаря проксированию через ServBay.
Пример развёртывания в режиме production
Для боевого применения проекта потребуется более устойчивый управляемый запуск (например, через PM2) и отдельные настройки. Ниже приведён пример запуска на другом порту с проксированием через ServBay:
Запуск production-сервера Hapi.js
Например, для порта
8586
и переменной окружения production:bashPORT=8586 NODE_ENV=production node server.js
1(Примечание: для production обычно используется PM2 или схожий процесс-менеджер для мониторинга, автоперезапуска и управления Node.js-приложениями. ServBay поддерживает интеграцию с PM2.)
Создание production-сайта (обратного прокси) в ServBay
На вкладке "Сайты" снова нажмите "+" и добавьте новый сайт:
- Имя (Name):
ServBay Hapi Prod
- Домен (Domain):
servbay-hapi-prod.servbay.demo
- Тип сайта (Type):
Обратный прокси (Reverse Proxy)
- Проксировать на (Proxy to):
- Протокол (Protocol):
http
- IP-адрес (IP Address):
127.0.0.1
- Порт (Port):
8586
- Протокол (Protocol):
Нажмите "Добавить".
- Имя (Name):
Доступ к production-версии Hapi.js-приложения
Откройте в браузере
https://servbay-hapi-prod.servbay.demo
. Вы увидите тот же результат, что и в режиме разработки (если только логика приложения не меняется в зависимости отNODE_ENV
).
Используя функцию Сайты ServBay, вы можете подключить локальные домены для разных проектов или их production/development-инстансов, связывая их с Node.js-приложениями на разных портах.
Подключение к встроенным базам данных ServBay
В ServBay встроена поддержка множества СУБД, таких как MySQL, MariaDB, PostgreSQL, MongoDB и Redis. Далее показано, как интегрировать их с вашим Hapi.js-проектом.
Важно: Прежде чем подключаться к нужной базе, убедитесь, что соответствующий пакет базы данных активирован на вкладке "Пакеты" в приложении ServBay, а служба базы данных запущена. Статус всех компонентов можно посмотреть в панели ServBay.
Стандартные логины и пароли для баз данных ServBay:
- MySQL/MariaDB: логин
root
, парольpassword
- PostgreSQL: логин
user
, парольpassword
- MongoDB: аутентификация не требуется (по умолчанию)
- Redis: аутентификация не требуется (по умолчанию)
Примечание: В целях безопасности настоятельно рекомендуется сменить стандартные пароли в ServBay, особенно если используется не только локально. Сменить пароли root для MySQL, MariaDB и PostgreSQL очень просто с помощью ServBay. См. официальную инструкцию.
Примеры подключения к разным СУБД. Не забудьте установить нужную npm-библиотеку.
Подключение к MySQL
Установите клиентскую библиотеку:
bashnpm install mysql2 # либо mysql
1Пример кода:
javascriptconst mysql = require('mysql2'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', // Стандартный логин ServBay password: 'password', // Стандартный пароль ServBay database: 'servbay_hapi_app' // Укажите имя своей базы данных }); connection.connect(err => { if (err) { console.error('Error connecting to MySQL: ' + err.stack); return; } console.log('Connected to MySQL as id ' + connection.threadId); }); // Для закрытия соединения при необходимости // connection.end();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19Подключение к MariaDB
Установите пакет:
bashnpm install mariadb
1Пример кода:
javascriptconst mariadb = require('mariadb'); const pool = mariadb.createPool({ host: 'localhost', user: 'root', // Стандартный логин ServBay password: 'password', // Стандартный пароль ServBay database: 'servbay_hapi_app', // Укажите имя своей базы данных connectionLimit: 5 // Размер пула подключений }); pool.getConnection() .then(conn => { console.log("Connected to MariaDB"); // conn.query(...) — выполнение запросов conn.release(); // Вернуть соединение в пул }) .catch(err => { console.error("Not connected to MariaDB due to error: " + err); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Подключение к PostgreSQL
Установите библиотеку:
bashnpm install pg
1Пример кода:
javascriptconst { Pool } = require('pg'); const pool = new Pool({ user: 'user', // Стандартный логин ServBay host: 'localhost', database: 'servbay_hapi_app', // Укажите имя своей базы данных password: 'password', // Стандартный пароль ServBay port: 5432, // Стандартный порт PostgreSQL }); pool.connect((err, client, done) => { if (err) { console.error('Error connecting to PostgreSQL: ', err); return; } console.log('Connected to PostgreSQL'); client.query('SELECT NOW()', (err, res) => { done(); // Освободить клиента из пула if (err) { console.error('Error executing query', err.stack); } else { console.log('PostgreSQL current time:', res.rows[0].now); } }); }); // Пул соединений автоматически закрывается при завершении приложения // pool.end();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27Подключение к MongoDB
Установите:
bashnpm install mongoose # либо mongodb
1Пример с использованием
mongoose
:javascriptconst mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/servbay-hapi-app', { useNewUrlParser: true, useUnifiedTopology: true, // MongoDB в ServBay по умолчанию не требует аутентификации. Если она настроена, добавьте authSource, user, pass // authSource: 'admin', // user: 'your_username', // pass: 'your_password', }) .then(() => console.log('MongoDB connected')) .catch(err => console.error('MongoDB connection error:', err)); // Соединение с Mongoose остаётся активным до завершения приложения // Отключение: mongoose.connection.close();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Подключение к Redis
Установите клиент:
bashnpm install redis
1Пример:
javascriptconst redis = require('redis'); // Используются стандартные параметры host: 'localhost', port: 6379 const client = redis.createClient(); client.on('error', function (err) { console.error('Redis Error: ' + err); }); client.on('connect', function () { console.log('Redis client connected'); }); // Подключение к серверу Redis client.connect(); // Для redis v4+ требуется вызов connect() // Пример: установить и получить значение // async function exampleRedisUsage() { // await client.set('mykey', 'myvalue'); // const value = await client.get('mykey'); // console.log('Value from Redis:', value); // await client.del('mykey'); // } // exampleRedisUsage(); // Закрытие соединения при завершении работы // client.quit();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Интегрируйте фрагменты кода подключения к нужным СУБД прямо в ваше приложение на Hapi.js — и вы сможете использовать любые возможности баз данных прямо в локальной среде благодаря ServBay.
Заключение
ServBay делает развёртывание среды разработки Hapi.js на macOS максимально простым и быстрым. Вы получаете комплексное решение: лёгкую установку и управление Node.js, рабочие базы данных "из коробки", а также возможность настраивать доступ к локальным сайтам с автоматической поддержкой обратного прокси и SSL-сертификатов. Следуйте данной инструкции — и вы быстро запустите свой проект на Hapi.js, воспользовавшись всеми преимуществами ServBay для ускорения разработки!