Следвайте този урок, за да научите за някои вълнуващи, допълващи се технологии, които можете да използвате за следващия си проект.

Подобно на други рамки Node.js, Nest.js предоставя цялостен набор от инструменти за изграждане на стабилни и мащабируеми бекенд услуги. Въпреки това е важно да разберете как да приложите създаването, четенето, актуализирането и изтриването (CRUD) операции в Nest.js ефективно – това са най-фундаменталните операции в разработката на API.

Научете как да изградите Nest.js CRUD REST API с помощта на TypeORM и PostgreSQL база данни.

Първи стъпки с Nest.js

За да започнете, инсталирайте инструмента за команден ред Nest.js:

npm i -g @nestjs/cli

След това създайте нов проект, като изпълните:

гнездо ново crud-приложение

Инструментът CLI ще ви подкани да изберете мениджър на пакети, изберете опцията, която намирате за най-предпочитана. Ще използваме npm, мениджърът на пакети Node.

CLI ще създаде основен проект Nest.js с всички необходими конфигурационни файлове и първоначални зависимости, необходими за стартиране на приложението.

instagram viewer

Накрая отидете до директорията на проекта и стартирайте сървъра за разработка.

cd crud-приложение
npm изпълнение стартиране

Можете да намерите кода на този проект в него GitHub хранилище.

Създайте PostgreSQL база данни

Този урок използва облачен екземпляр на PostgreSQL, но вместо това можете да настроите локална база данни на PostgreSQL. Можеш инсталирайте PostgreSQL на Windows, на macOS, или на Linux.

За да настроите облачен екземпляр на PostgreSQL:

  1. Насочете се към ElephantSQL, регистрирайте се и влезте в страницата за общ преглед на вашия акаунт.
  2. Щракнете върху Създайте нов екземпляр в горния ляв раздел на страницата, за да създадете нов екземпляр за вашето приложение.
  3. Попълнете името на вашето копие, изберете безплатния план и накрая изберете региона, за да завършите процеса на настройка.
  4. След като създадете екземпляра на базата данни, отидете на настройки страница и копирайте предоставената URL на базата данни.

Конфигурирайте връзката към базата данни

В главната директория на вашия проект създайте a .env файл и поставете URL адреса за връзка с базата данни, както следва:

DATABASE_URL=""

Сега инсталирайте тези пакети:

npm инсталирайте pg typeorm @nestjs/typeorm @nestjs/config

След това продължете и създайте модул на база данни с помощта на CLI инструмента.

nest g модул база данни

Отвори база данни/база данни.module.ts файл и добавете следния конфигурационен код на базата данни:

импортиране { Модул } от„@nestjs/common“;
импортиране {ConfigModule, ConfigService} от„@nestjs/config“;
импортиране { TypeOrmModule } от„@nestjs/typeorm“;
импортиране { потребител } от'../users/models/user.entity';

@Модул({
внос: [
TypeOrmModule.forRootAsync({
импортира: [ConfigModule],
инжектиране: [ConfigService],

useFactory: асинхронен (configService: ConfigService) => ({
Тип: "postgres",
url: configService.get(„DATABASE_URL“),
обекти: [Потребител],
синхронизирам: вярно
}),
}),
],
})

износклас DatabaseModule {}

Този модул на база данни управлява връзката чрез конфигуриране на модула TypeORM с необходимия параметър за връзка, URL адреса на базата данни.

Освен това, той дефинира потребителския обект като част от конфигурацията, която определя структурата и свойствата на данните, съхранявани в таблицата на базата данни на PostgreSQL.

На този етап вашият код вероятно ще изведе грешка, защото все още не сте създали обекта потребители. Ще направите това в следващите стъпки.

Актуализирайте файла app.module.ts

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

импортиране { Модул } от„@nestjs/common“;
импортиране {ConfigModule} от„@nestjs/config“;
импортиране { AppController } от'./app.controller';
импортиране { AppService } от'./app.service';
импортиране { DatabaseModule } от'./база данни/база данни.модул';

@Модул({
внос: [
ConfigModule.forRoot({
envFilePath: ".env",
}),
DatabaseModule,
],

контролери: [AppController],
доставчици: [AppService],
})

износклас AppModule {}

Дефиниране на потребителски модул

Потребителският модул служи като централизиран компонент, отговорен за капсулирането и управлението на логиката, необходима за прилагане на CRUD функционалността на API.

Изпълнете тази терминална команда, за да създадете потребителския модул на API.

потребители на nest g module

CLI инструментът автоматично актуализира app.module.ts файл за отразяване на направените промени, в допълнение към създаването на потребителския модул. Това гарантира, че новосъздаденият модул, потребители, е правилно интегриран в конфигурацията на модула на приложението.

Създайте потребителски обект

TypeORM е библиотека за обектно-релационно съпоставяне (ORM), която опростява взаимодействията с бази данни в приложения, които използват TypeScript, като съпоставя обекти на JavaScript към таблици на база данни.

Чрез създаването на потребителски обект с помощта на TypeORM вие дефинирате структурата и свойствата на потребителските данни в базата данни PostgreSQL.

В потребителската директория създайте нова модели/user.entity.ts и добавете следния код.

импортиране { Entity, PrimaryGeneratedColumn, Column, } от"машина";

@Entity()
износклас потребител {
@PrimaryGeneratedColumn()
документ за самоличност: номер;

@Колона()
име: низ;

@Колона()
електронна поща: низ;
}

The Потребител entity определя структурата на потребителските данни, съхранявани в базата данни. В този случай това е документ за самоличност като колона с първичен ключ и име и електронна поща колони и съответните им свойства.

Създайте услугата CRUD API

Сега създайте API услугата, която ще управлява логиката за CRUD операциите, като изпълните командата по-долу:

потребители на услугата nest g

Отвори потребител-auth.service.ts файл и добавете този код:

импортиране { Инжекционен } от„@nestjs/common“;
импортиране { InjectRepository } от„@nestjs/typeorm“;
импортиране { Хранилище } от"typeorm";
импортиране {Потребител} от'./models/user.entity';

@Инжекционен()
износклас UsersService {
конструктор(
@InjectRepository(потребител)
частен userRepository: Хранилище,
) {}

асинхронен findAll(): обещание {
връщанетова.userRepository.find();
}

асинхронен findOne (id: номер): обещание {
връщанетова.userRepository.findOne({ където: { id } });
}

асинхронен създаване (потребител: Частичен): обещание {
конст нов потребител = това.userRepository.create (потребител);
връщанетова.userRepository.save (нов потребител);
}

асинхронен актуализация (id: номер, потребител: Частично): обещание {
изчакайтетова.userRepository.update (id, потребител);
връщанетова.userRepository.findOne({ където: { id } });
}

асинхроненИзтрий(документ за самоличност: номер): обещание<невалиден> {
изчакайтетова.userRepository.delete (id);
}
}

Този клас UsersService дефинира различни API методи, предназначени за обработка на CRUD операции. Тези методи включват извличане на данни на всички потребители, намиране на конкретен потребител чрез техния идентификационен номер, създаване нов потребител, актуализиране на съществуващ потребител и метод за изтриване на данни на конкретен потребител в базата данни.

Дефинирайте контролер за API

Създайте контролер, който ще управлява крайните точки на API за свързаните с потребителя операции.

потребители на контролера nest g

След това добавете кода по-долу към users.controller.ts файл.

импортиране { Controller, Get, Post, Body, Put, Param, Delete, NotFoundException, HttpCode } от„@nestjs/common“;
импортиране {UsersService} от'./users.service';
импортиране { потребител } от'./models/user.entity';

@Контролер('api/потребители')
износклас UsersController {
конструктор(частен само за четене usersService: UsersService) {}

@Вземете()
асинхронен findAll(): обещание {
връщанетова.usersService.findAll();
}

@Публикуване()
@HttpCode(201)
асинхронен създайте (@Тяло() потребител: потребител): обещание {
конст createdUser = изчакайтетова.usersService.create (потребител);
връщане createdUser;
}

@Слагам(':документ за самоличност')
асинхронен актуализация (@Парам('документ за самоличност') документ за самоличност: номер, @Тяло() потребител: потребител): обещание<всякакви> {
изчакайтетова.usersService.update (id, потребител);
връщане { съобщение: „Потребителят е актуализиран успешно“ };
}

@Изтрий(':документ за самоличност')
асинхроненИзтрий(@Парам('документ за самоличност') документ за самоличност: номер): обещание<всякакви> {
конст потребител = изчакайтетова.usersService.findOne (id);

ако (!потребител) {
хвърлямнов NotFoundException('Потребителят не съществува!');
}

изчакайтетова.usersService.delete (id);
връщане { съобщение: „Потребителят е изтрит успешно“ };
}
}

Контролерът управлява крайни точки на API за потребителски операции. Той обработва GET заявки за извличане на всички потребители, POST заявки за създаване на нови потребители, PUT заявки за актуализиране на съществуващи потребители и DELETE заявки за изтриване на потребители.

Чрез използване на UsersService и взаимодействие с Потребител обект, този контролер предоставя пълен API за управление на свързани с потребителя операции върху данните, съхранявани в базата данни.

Актуализирайте файла users.module.ts

И накрая, актуализирайте потребители.модул.ts файл, както е показано по-долу, за да сте сигурни, че включвате Потребителски обект и модула TypeORM, който установява връзката с базата данни.

импортиране { Модул } от„@nestjs/common“;
импортиране { UsersController } от'./users.controller';
импортиране {UsersService} от'./users.service';
импортиране { TypeOrmModule } от„@nestjs/typeorm“;
импортиране { потребител } от'./models/user.entity';

@Модул({
импортира: [TypeOrmModule.forFeature([User])],
контролери: [UsersController],
доставчици: [UsersService]
})

износклас Потребителски модул {}

И накрая, продължете и завъртете сървъра за разработка, за да тествате CRUD операциите с помощта на Postman.

npm изпълнение стартиране

Сървърът ще стартира на порт 3000 и можете да изпращате API заявки към него на http://localhost: 3000/api/потребители.

Изграждане на бекенд приложения с Nest.js

Независимо дали разработвате прост REST API или сложно уеб приложение, Nest.js предлага изчерпателен набор от функции и възможности за изграждане на надеждна и стабилна бекенд система.

Nest.js предлага по-структуриран подход към разработването на проекти от Express.js. Това гарантира, че можете уверено да изграждате, мащабирате и поддържате сложни приложения, благодарение на неговия организиран и модулен дизайн.