Часть 1: запуск сервера и базовая маршрутизация
Я знаю, что кажется, что единственный фреймворк для Node - это Express, но я думаю, что это стоит того, чтобы новые программисты попробовали hapi. Hapi чрезвычайно легкий и построен на системе плагинов, которая поддерживает все модульное. Кроме того, у него отличная документация , и у них есть небольшой симпатичный раздел руководств. В этой серии статей мы рассмотрим основы, начиная с настройки вашего сервера и добавления некоторых маршрутов.
Вот GitHub, чтобы увидеть готовый проект
Хапи 16 и 17
быстрое примечание о том, какую версию вам следует использовать. Произошел сдвиг в структуре с 16 на 17, где он перешел от использования обратных вызовов к async / await. В этом руководстве, как и в большинстве профессионалов, будет использоваться hapi 17 и выше. Если вы работаете над более старым кодом, который необходимо обновить, я настоятельно рекомендую использовать эту статью о преобразовании hapi в качестве руководства. Это отличный сайт, чтобы просто покопаться, мне очень понравилось просматривать их руководства.
Начало работы: установка
Беги npm install hapi
, и все будет хорошо. Вам также следует установить nodemon глобально. Это позаботится о перезапуске сервера при изменении файлов. Или вы можете просто клонировать мой GitHub, который использует магию npx для запуска локально установленного nodemon.
Запускаем с файлом server.js
Вот как выглядит наш server.js
файл:
const Hapi = require(‘hapi’); const server = new Hapi.Server({ host: ‘localhost’, port: 3101, }); const launch = async () => { try { await server.start(); } catch (err) { console.error(err); process.exit(1); }; console.log(`Server running at ${server.info.uri}`); } launch();
Если вы запустите npm start
и перейдете на http: // localhost: 3101 /, вы увидите, что наш сервер запущен и работает, вы просто получаете 404, потому что мы не сделали обработчик маршрута пока что. Но прежде чем мы это сделаем, давайте поговорим о двух основных частях:
Метод Server и его объект конфигурации
Как видите, мы создаем наш сервер, вызывая hapi’s Server method
. Он принимает объект конфигурации и возвращает объект server
, с которым мы можем работать. Так много всего можно поместить в объект конфигурации, но пока все, что вам нужно, это хост и порт, строка и целое число соответственно. Кроме того, ‘localhost’
подойдет, если вы просто возитесь, но избавьте себя от раздражения и установите для хоста ‘0.0.0.0’
, если вы используете Docker.
Метод «запуска»
У Hapi есть встроенный асинхронный метод на сервере под названием start()
, и вы могли подумать, что это все, что вам нужно. Но вскоре мы сделаем множество вещей для нашего сервера, прежде чем он действительно запустится, и будет полезно хранить их все в одном месте. Вот почему принято создавать собственные функции. Я люблю называть свой «запуск», но вы можете называть это как угодно. Он также будет обрабатывать любые ошибки, выводя их на консоль и выходя из процесса узла.
После определения функции мы вызываем ее в конце нашего файла, что, наконец, запускает наш сервер. А теперь давайте добавим маршруты!
Добавление основных маршрутов
Вы добавляете маршруты с помощью метода route()
серверного объекта. Метод принимает либо объект конфигурации, либо массив объектов. Вот как выглядит самый простой маршрут:
server.route({ method: 'GET', path: '/', handler: (request, h) => { return 'I am the home route' } });
Теперь, если вы перейдете на http: // localhost: 3101 /, на экране будет напечатана строка вместо 404. Прогресс! Что касается объекта конфигурации, мы дадим ему как минимум три свойства: method
, path
и handler
.
метод
Это HTTP-глагол, который запускает маршрут, это может быть строка или массив строк (более распространенный способ увидеть строку). Использование заглавных букв не имеет значения, но лично я считаю, что заглавные буквы выглядят аккуратнее.
дорожка
Это фактический путь строки маршрута, который вы должны ввести в браузер, и где вы должны указать свои параметры.
функция обработчика
Это функция, которая определяет, что отправляется обратно клиенту. У него есть доступ как к исходному объекту request
, так и к так называемому h response toolkit
. Они отлично подходят для более сложных ответов, но простого return
- это все, что нужно для отправки обратно .json или строк.
Добавление маршрутов к вашему серверу в контексте
Итак, ваш окончательный server.js
файл выглядит так:
const Hapi = require('hapi'); // create a server with a host and port const server = new Hapi.Server({ host: 'localhost', port: 3101 }); // add each route server.route([ { method: 'GET', path: '/', handler: (request, h) => { return 'I am the home route'; }, }, { method: 'GET', path: '/example', handler: (request, h) => { return { msg: 'I am json' }; }, } ]); // define server start function const launch = async () => { try { await server.start(); } catch (err) { console.error(err); process.exit(1); }; console.log(`Server running at ${server.info.uri}`); } // start your server launch();
Поздравляю! Вы построили крошечный сервер с hapi! Мы рассмотрим параметры пути и то, как использовать набор инструментов ответа в следующей части, но я рекомендую вам пока проверять учебные пособия и документацию.
Всем удачного кодирования,
Майк