Nest.js — это фреймворк для создания серверных приложений на языке TypeScript или JavaScript, построенный поверх Node.js. Он предоставляет высокоуровневую архитектуру, которая помогает разработчикам структурировать код, следуя принципам модульности и масштабируемости. Основное предназначение Nest.js — упрощение создания сложных серверных приложений с использованием современных подходов, таких как зависимостная инъекция, декораторы и использование готовых решений из экосистемы Node.js.
Убедитесь заранее что у вас на компьютере установлен Node.js, если его нет, то вам необходимо его скачать.
cloud
Создадим простое приложение «Угадай число», которое будет состоять из простого API, где пользователь отправляет свои догадки, а сервер сообщает, угадал он число или нет.
Запустите консоль Windows или другой терминал.
Установите Nest.js, если до этого он у вас не был установлен:
npm install -g @nestjs/cli
Перейдите в папку, в которой вы хотите создать проект:
cd Desktop
Создайте новый проект:
nest new guess-number
В данном случае guess-number
— это название проекта.
Откройте проект в удобном для вас редакторе кода, например в VS Code.
При создании проекта, у вас спросит каким пакетным менеджером вы хотите пользоваться. Вы можете использовать любой удобный для вас, но я буду пользоваться именно npm
.
В процессе разработки приложения на Nest.js необходимо устанавливать все необходимые библиотеки и запускать проект в рабочей директории. Если у вас возникли проблемы с установкой или запуском, убедитесь, что вы находитесь в нужной папке.
Структура созданного проекта выглядит следующим образом. Все необходимые для разработки файлы расположены в папке src
.
Чтобы запустить проект, введите в консоли:
npm run start
Если всё успешно, то в консоли отобразятся логи:
Чтобы посмотреть на проект, необходимо самому открыть в браузере ссылку http://localhost:3000/
. По ссылке будет отображаться простая страница с текстом «Hello World!».
Генерируем модуль game
:
nest generate module game
Генерируем контроллер:
nest generate controller game
Генерируем сервис:
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.
После того как вы разработаете приложение на Nest.js, вам нужно будет переместить файлы из папки на GitHub. Для этого создайте новый приватный репозиторий на GitHub и вернитесь к своему проекту. Затем, используя командную строку и убедившись, что вы находитесь в папке с проектом, загрузите все файлы в свой репозиторий.
Создаем новый Git-репозиторий в текущей папке:
git init
Добавляем все изменения, сделанные в текущей директории, к следующему коммиту. При вводе команды обязательно поставьте точку в конце:
git add .
Создаём коммит, фиксируя все изменения, добавленные командой git add
:
git commit -m "first commit"
Переименовываем текущую ветку в main
и устанавливаем её в качестве основной:
git branch -M main
Добавляем удалённый репозиторий под именем origin
и связываем его с указанным URL. Вместо моей ссылки укажите ссылку на ваш новый созданный репозиторий:
git remote add origin https://github.com/Tulopex/guess-number.git
Отправляем изменения из локальной ветки main
в удаленную ветку main
на репозитории origin
:
git push -u origin main
Для деплоя Nest.js я воспользуюсь сервисом Apps от Timeweb Cloud. Если вы ещё не клиент Timeweb Cloud, предварительно нужно зарегистрироваться.
Для начала нужно создать новый проект. Введите его название. Также, если хотите, можете добавить описание и иконку проекту.
После того как проект был создан, нужно создать Apps. Это можно сделать как с главного экрана проекта, так и через боковое меню. При создании нужно выбрать тип Backend и фреймворк Nest.js.
Для того чтобы загружать проекты, необходимо привязать профиль на GitHub. После этого укажите название репозитория, который вы создали ранее. В разделе «Регион» выберите тот, который находится ближе к вам и имеет наименьший пинг.
В параметрах конфигурации укажите необходимое количество запросов. В настройках приложения ничего не меняйте.
В описании приложения укажите его наименование, а при необходимости — комментарий. Также выберите проект, с которым будет связано ваше приложение.
Далее можно нажимать на кнопку «Запустить деплой», после чего начнётся автоматическое развёртывание вашего приложения на 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. Этот процесс наглядно демонстрирует, насколько просто и быстро можно создавать и развёртывать приложения с использованием современных инструментов и подходов.