Часть 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! Мы рассмотрим параметры пути и то, как использовать набор инструментов ответа в следующей части, но я рекомендую вам пока проверять учебные пособия и документацию.

Всем удачного кодирования,

Майк