Yamato DaiwaBackend

Простейший пример «Привет, мир!»

Требуемые знания и навыки

Здесь и далее подразумевается, что Вы уже умеете/знаете:

  • Создавать Node.js-проект и устанавливать npm-зависимости (если нет, то Вам сначала следует изучить основы Node.js).
  • Настраивать компилятор языка TypeScript (фреймворк Yamato Daiwa Backend (далее: YDB) предполагает использование языка TypeScript, причём без типа any).
  • Основы Объектно-Ориентированного Программирования (ООП) — предлагаемые Yamato Daiwa Backend подходы предполагают широкое использование ООП. Хотя YDB не навязывает конкретной архитектуры, использование ООП желательно, а потому будет в следующих уроках.

Развёртывание Node.js-проекта

Создайте новый Node.js-проект и установите приведённые ниже npm-зависимости. Во избежание проблем, связанных с меняющимся программным интерфейсом по мере выхода новых версией этих зависимостей, в рамках данного урока настоятельно рекомендуется устанавливать версии, указанные в квадратных скобках.

@yamato-daiwa/backend [0.3.0]
Главный npm-пакет данного фреймворка
@yamato-daiwa/es-extensions [1.7.0]
Вспомогательная функциональность, которая актуальна как для Node.js, так и для браузерного JavaScript-а. В данном уроке нам потребуется лишь перечисление HTTP_Methods, но в будущем — гораздо больше.
ts-node [10.9.2]
REPL для языка TypeScript. Создаёт эффект того, что TypeScript имеет собственную среду выполнения, что позволит нам на время этого урока рутины, связанные с выходными JavaScript-файлами.
typescript [5.5.4]
Основной npm-пакет языка TypeScript. ts-node требует отдельной установки этого пакета (говоря терминологией npm, typescript является одноранговой зависимостью по отношению к ts-node). Хотя в современный npm устанавливает одноранговые зависимости автоматически, мы будем осознанно устанавливать конкретную версию этого пакета.

Код

Это приложение отправит HTML-код, состоящий из заголовка h1 с текстовым содержимым «Hello, world!» в ответ на HTTP-запрос типа GET по адресу http://127.0.0.1:80/. Вообще, такой код не является валидной HTML-страницей, но в тестовых целях отправка одного только тела HTML-документа возможна — современные браузеры его отобразят. Перед тем, как отправить запрос, разберём код данного простейшего примера.

Тестирование

Запустим приложение с помощью ts-node.

Если в коде нет ошибок, то Вы будете проинформированы об успешном запуске приложения следующим выводом в терминал:

В консоли зелёным цветом отображается сообщение об успешном запуске веб-приложения, озаглавленное «The serving of HTTP requests started» — «Обслуживание HTTP-запросов стартовало». Веб-приложение написано на Node.js/TypeScript с использованием фреймворка «Yamato Daiwa Backend» (сокращённо: «YDB»).

Откройте указанный URI в браузере. Если Ваш терминал распознаёт ссылки, то Вы можете по ней перейти кликом мыши. В терминале отобразится как минимум один лог о новом запросе по корневому маршруту:

В консоли синим цветом отображается сообщение о регистрации get-запроса по корневому маршруту, озаглавленное «New request» — «Новый запрос». Веб-приложение написано на Node.js/TypeScript с использованием фреймворка «Yamato Daiwa Backend» (сокращённо: «YDB»).

Возможно, будет логирован ещё один запрос по маршруту /favicon.ico:

В консоли синим цветом отображается сообщение о регистрации get-запроса по маршруту "/favicon", озаглавленное «New request» — «Новый запрос». Веб-приложение написано на Node.js/TypeScript с использованием фреймворка «Yamato Daiwa Backend» (сокращённо: «YDB»).

Если такой лог присутствует, значит соответствующий запрос был отправлен браузером автоматически, чтобы отобразить иконку на вкладке браузера. Если бы фреймворк не был готов к такому запросу, то отправил ответ с ошибкой «не найдено», однако фреймворк YDB по умолчанию отправляет свою иконку. Разумеется, её можно заменить на другую, что мы и сделаем в одном из будущих уроков.

Поскольку localhost является «местоимением» для IP-адреса 127.0.0.1, а 80порт по умолчанию для протокола HTTP, то помимо http://127.0.0.1:80/ мы можем отправлять запросы на http://localhost, http://localhost:80 или http://127.0.0.1:80/.

Наконец, посмотрим как фреймворк поведёт себя, когда будет отправлен запрос, обработка которого не прописана в routing. Например, для запроса http://127.0.0.1:80/foo лог будет таким:

В консоли синим цветом отображается сообщение о регистрации get-запроса по маршруту "/foo", озаглавленное «New request» — «Новый запрос», а также красным цветом — сообщение о том, что данный запрос ссылается на неизвестный ресурс (озаглавлено «Requested resource not found» — «запрашиваемый ресурс не найден»). Веб-приложение написано на Node.js/TypeScript с использованием фреймворка «Yamato Daiwa Backend» (сокращённо: «YDB»).

Фреймворк сообщил, что запрашиваемый ресурс не найден. Аналогичное сообщение должен показать браузер — на основании отправленного статуса ответа 404 Not found.