<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Бесплатный перенос IT-инфраструктуры в облако

Как создать и развернуть приложение на Nest: быстрый и простой деплой с Apps

Вадим Андоськин
Вадим Андоськин
Технический писатель
20 декабря 2024 г.
46
8 минут чтения
Средний рейтинг статьи: 5

Nest.js — это фреймворк для создания серверных приложений на языке TypeScript или JavaScript, построенный поверх Node.js. Он предоставляет высокоуровневую архитектуру, которая помогает разработчикам структурировать код, следуя принципам модульности и масштабируемости. Основное предназначение Nest.js — упрощение создания сложных серверных приложений с использованием современных подходов, таких как зависимостная инъекция, декораторы и использование готовых решений из экосистемы Node.js.

Разработка

Убедитесь заранее что у вас на компьютере установлен Node.js, если его нет, то вам необходимо его скачать

cloud

Создание проекта

Создадим простое приложение «Угадай число», которое будет состоять из простого API, где пользователь отправляет свои догадки, а сервер сообщает, угадал он число или нет.

  1. Запустите консоль Windows или другой терминал.

  2. Установите Nest.js, если до этого он у вас не был установлен:

npm install -g @nestjs/cli
  1. Перейдите в папку, в которой вы хотите создать проект:

cd Desktop
  1. Создайте новый проект:

nest new guess-number

В данном случае guess-number — это название проекта.

  1. Откройте проект в удобном для вас редакторе кода, например в VS Code.

При создании проекта, у вас спросит каким пакетным менеджером вы хотите пользоваться. Вы можете использовать любой удобный для вас, но я буду пользоваться именно npm.

Image1

Написание кода

В процессе разработки приложения на Nest.js необходимо устанавливать все необходимые библиотеки и запускать проект в рабочей директории. Если у вас возникли проблемы с установкой или запуском, убедитесь, что вы находитесь в нужной папке.

Структура созданного проекта выглядит следующим образом. Все необходимые для разработки файлы расположены в папке src.

Image4

Чтобы запустить проект, введите в консоли:

npm run start

Если всё успешно, то в консоли отобразятся логи:

Image8

Чтобы посмотреть на проект, необходимо самому открыть в браузере ссылку http://localhost:3000/. По ссылке будет отображаться простая страница с текстом «Hello World!».

Создание модулей игры

  1. Генерируем модуль game:

nest generate module game
  1. Генерируем контроллер:

nest generate controller game
  1. Генерируем сервис:

nest generate service game

Откройте файл src/game/game.service.ts и добавьте логику игры:

import { Injectable } from '@nestjs/common';


@Injectable()
export class GameService {
  private randomNumber: number;
  private difficulty: string = 'easy'; // Уровень сложности по умолчанию
  private range = { easy: 10, medium: 50, hard: 100 }; // Диапазоны сложности


  setDifficulty(difficulty: string): string {
    if (!this.range[difficulty]) {
      return `Неверная сложность! Доступны следующие варианты: ${Object.keys(this.range).join(', ')}`;
    }
    this.difficulty = difficulty;
    return `Сложность установлена на ${difficulty}`;
  }


  startNewGame(): string {
    const maxRange = this.range[this.difficulty];
    this.randomNumber = Math.floor(Math.random() * maxRange) + 1;
    return `Новая игра началась! Сложность: ${this.difficulty}, диапазон: 1-${maxRange}`;
  }


  guessNumber(guess: number): string {
    if (guess < this.randomNumber) {
      return 'Меньше!';
    } else if (guess > this.randomNumber) {
      return 'Больше!';
    } else {
      return 'Правильно! Вы угадали число!';
    }
  }
}

Откройте файл src/game/game.controller.ts и настройте эндпоинты. Эндпоинт — это точка взаимодействия клиента с сервером, представленная в виде URL-адреса. Когда клиент отправляет запрос на сервер, он обращается к определённому эндпоинту.

В Nest.js эндпоинты настраиваются в контроллерах с помощью декораторов, таких как @Get, @Post, @Put и т. д. Эти декораторы определяют, какой метод обработки HTTP-запросов будет использоваться для конкретного эндпоинта. В нашем случае, мы будем использовать эндпоинт @Get:

import { Controller, Get, Param, Query } from '@nestjs/common';
import { GameService } from './game.service';


@Controller('game')
export class GameController {
  constructor(private readonly gameService: GameService) {}


  @Get('set-difficulty/:difficulty')
  setDifficulty(@Param('difficulty') difficulty: string): string {
    return this.gameService.setDifficulty(difficulty);
  }


  @Get('start-game')
  startGame(): string {
    return this.gameService.startNewGame();
  }


  @Get('guess')
  guessNumber(@Query('number') number: string): string {
    const guess = parseInt(number, 10);
    if (isNaN(guess)) {
      return 'Неверное число! Пожалуйста, укажите правильное целое число.';
    }
    return this.gameService.guessNumber(guess);
  }
}

Добавьте модуль GameModule в src/app.module.ts:

import { Module } from '@nestjs/common';
import { GameModule } from './game/game.module';


@Module({
  imports: [GameModule],
})
export class AppModule {}

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

Чтобы быстро исправить форматирование, введите в консоли следующую команду:

npx prettier --write .

Убедитесь, что в конце команды есть обязательная точка.

После выполнения этой команды Prettier автоматически исправит все проблемы, связанные с переносами строк и форматированием.

Чтобы применить изменения в коде к вашему приложению, необходимо его перезапустить. Для этого выполните команду:

npm run start

При запуске приложение будет заново собрано, поэтому после каждого изменения в коде его нужно запускать повторно.

Пояснение по коду:

  • Модуль (GameModule).

    • Объединяет сервис и контроллер, предоставляя их в приложение.

  • Сервис (GameService).

    • Генерирует случайное число.

    • Отвечает за проверку числа и подсказки.

    • Сбрасывает игру после угадывания числа.

    • Устанавливает сложность.

  • Контроллер (GameController).

    • Обрабатывает HTTP-запросы.

    • Взаимодействует с сервисом и возвращает ответы клиенту.

Объяснение запросов:

Установка сложности

Отправьте запрос на адрес http://localhost:3000/game/set-difficulty/medium, и сложность сохранится как средняя, а диапазон чисел для угадывания — от 1 до 50. Из доступных уровней сложностей есть: easy, medium, hard.

Начало новой игры

Отправьте запрос на адрес http://localhost:3000/game/start-game, чтобы начать новую игру. Если до этого вы не выбирали сложность, то она будет по умолчанию установлена на легкую.

Попытка угадать число

Отправьте запрос например на http://localhost:3000/game/guess?number=25. Если число меньше загаданного, то сервер вернёт «Больше!», и наоборот. Если число верное, то сервер вернёт «Правильно! Вы угадали число!».

Деплой приложения

Теперь можно загрузить наше приложение на сервер, чтобы оно было доступно для всех, но перед этим его необходимо сперва загрузить на GitHub.

Загрузка на GitHub

После того как вы разработаете приложение на Nest.js, вам нужно будет переместить файлы из папки на GitHub. Для этого создайте новый приватный репозиторий на GitHub и вернитесь к своему проекту. Затем, используя командную строку и убедившись, что вы находитесь в папке с проектом, загрузите все файлы в свой репозиторий.

  1. Создаем новый Git-репозиторий в текущей папке:

git init
  1. Добавляем все изменения, сделанные в текущей директории, к следующему коммиту. При вводе команды обязательно поставьте точку в конце:

git add .
  1. Создаём коммит, фиксируя все изменения, добавленные командой git add:

git commit -m "first commit"
  1. Переименовываем текущую ветку в main и устанавливаем её в качестве основной:

git branch -M main
  1. Добавляем удалённый репозиторий под именем origin и связываем его с указанным URL. Вместо моей ссылки укажите ссылку на ваш новый созданный репозиторий:

git remote add origin https://github.com/Tulopex/guess-number.git
  1. Отправляем изменения из локальной ветки main в удаленную ветку main на репозитории origin:

git push -u origin main

Загрузка на сервер

Для деплоя Nest.js я воспользуюсь сервисом Apps от Timeweb Cloud. Если вы ещё не клиент Timeweb Cloud, предварительно нужно зарегистрироваться.

Для начала нужно создать новый проект. Введите его название. Также, если хотите, можете добавить описание и иконку проекту.

Image5

После того как проект был создан, нужно создать Apps. Это можно сделать как с главного экрана проекта, так и через боковое меню. При создании нужно выбрать тип Backend и фреймворк Nest.js.

Image2

Для того чтобы загружать проекты, необходимо привязать профиль на GitHub. После этого укажите название репозитория, который вы создали ранее. В разделе «Регион» выберите тот, который находится ближе к вам и имеет наименьший пинг.

Image7

В параметрах конфигурации укажите необходимое количество запросов. В настройках приложения ничего не меняйте.

Image6

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

Image3

Далее можно нажимать на кнопку «Запустить деплой», после чего начнётся автоматическое развёртывание вашего приложения на Nest.js. Через некоторое время приложение запустится, и в случае успешного развертывания проекта в логах деплоя будет написано: «Deployment successfully completed».

Когда приложение запустится, у вас также появится бесплатный домен, который будет привязан к приложению. Найти его можно в разделе «Настройки» вашего приложения. Теперь по этому домену вы можете отправлять различные запросы для взаимодействия с приложением. Чтобы убедиться, что всё работает правильно, отправляйте запросы не на localhost, а на предоставленный вам домен. Например, запрос на начало игры в моём случае выглядит следующим образом:
https://tulopex-guess-number-753f.twc1.net/game/start-game

Подготовили для вас выгодные тарифы на облачные серверы

Заключение

Nest.js — это современный фреймворк для разработки серверных приложений, отличающийся модульной структурой, поддержкой JavaScript и TypeScript, а также интеграцией с популярными библиотеками Node.js. В этой статье мы подробно рассмотрели процесс создания и развёртывания приложения на платформе Timeweb Cloud Apps. Этот процесс наглядно демонстрирует, насколько просто и быстро можно создавать и развёртывать приложения с использованием современных инструментов и подходов.

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
20 декабря 2024 г.
46
8 минут чтения
Средний рейтинг статьи: 5
Пока нет комментариев