Како да направите Нест.јс ЦРУД РЕСТ АПИ користећи ТипеОРМ и ПостгреСКЛ

Као и други Ноде.јс оквири, Нест.јс пружа свеобухватан комплет алата за изградњу робусних и скалабилних позадинских услуга. Без обзира на то, важно је разумети како ефикасно имплементирати операције креирања, читања, ажурирања и брисања (ЦРУД) у Нест.јс—ово су најосновније операције у развоју АПИ-ја.

Научите како да направите Нест.јс ЦРУД РЕСТ АПИ користећи ТипеОРМ и ПостгреСКЛ базу података.

Први кораци са Нест.јс

Да бисте започели, инсталирајте Нест.јс алатку командне линије:

 npm i -g @nestjs/cli 

Затим креирајте нови пројекат тако што ћете покренути:

 nest new crud-app 

ЦЛИ алат ће од вас затражити да одаберете менаџера пакета, изаберите опцију која вам је најпожељнија. Користићемо нпм, Ноде менаџер пакета.

ЦЛИ ће повезати основни Нест.јс пројекат са свим потребним конфигурационим датотекама и почетним зависностима потребним за покретање апликације.

На крају, идите до директоријума пројекта и покрените развојни сервер.

 cd crud-app
npm run start

Код овог пројекта можете пронаћи у њему ГитХуб репозиторијум.

Направите ПостгреСКЛ базу података

Овај водич користи инстанцу ПостгреСКЛ у облаку, али уместо тога можете подесити локалну ПостгреСКЛ базу података. ПостгреСКЛ можете инсталирати на Виндовс, на мацОС или на Линук.

Да бисте подесили инстанцу ПостгреСКЛ у облаку:

  • Пређите на ЕлепхантСКЛрегиструјте се и пријавите се на страницу са прегледом свог налога.
  • Кликните на дугме Креирај нову инстанцу у горњем левом делу странице да бисте креирали нову инстанцу за своју апликацију.
  • Унесите назив своје инстанце, изаберите бесплатни план и на крају изаберите регион да бисте довршили процес подешавања.
  • Након креирања инстанце базе података, идите на страницу са подешавањима и копирајте наведени УРЛ базе података.
  •   Како омогућити 2к зумирање у сензору на Самсунг Галаки С23

    Конфигуришите везу са базом података

    У основном директоријуму вашег пројекта креирајте .енв датотеку и налепите УРЛ везе са базом података на следећи начин:

     DATABASE_URL="<your connection url here>" 

    Сада инсталирајте ове пакете:

     npm install pg typeorm @nestjs/typeorm @nestjs/config 

    Затим, наставите и креирајте модул базе података користећи ЦЛИ алат.

     nest g module database 

    Отворите датотеку базе података/датабасе.модуле.тс и додајте следећи конфигурациони код базе података:

     import { Module } from '@nestjs/common';
    import { ConfigModule, ConfigService } from '@nestjs/config';
    import { TypeOrmModule } from '@nestjs/typeorm';
    import { User } from '../users/models/user.entity';

    @Module({
      imports: [
        TypeOrmModule.forRootAsync({
          imports: [ConfigModule],
          inject: [ConfigService],

          useFactory: async (configService: ConfigService) => ({
            type: 'postgres',
            url: configService.get('DATABASE_URL'),
            entities: [User],
            synchronize: true
          }),
        }),
      ],
    })

    export class DatabaseModule {}

    Овај модул базе података управља везом тако што конфигурише модул ТипеОРМ са потребним параметром везе, УРЛ-ом базе података.

    Поред тога, дефинише ентитет Усер као део конфигурације која специфицира структуру и својства података ускладиштених у табели базе података ПостгреСКЛ.

    У овој фази, ваш код ће вероватно избацити грешку јер још увек нисте креирали ентитет корисника. То ћете урадити у следећим корацима.

    Ажурирајте датотеку апп.модуле.тс

    На крају, ажурирајте главни модул апликације да бисте укључили конфигурацију за модул базе података.

     import { Module } from '@nestjs/common';
    import { ConfigModule } from '@nestjs/config';
    import { AppController } from './app.controller';
    import { AppService } from './app.service';
    import { DatabaseModule } from './database/database.module';

    @Module({
      imports: [
        ConfigModule.forRoot({
          envFilePath: '.env',
        }),
        DatabaseModule,
      ],

      controllers: [AppController],
      providers: [AppService],
    })

    export class AppModule {}

    Дефинишите кориснички модул

    Кориснички модул служи као централизована компонента, одговорна за капсулирање и управљање логиком потребном за имплементацију ЦРУД функционалности АПИ-ја.

    Покрените ову наредбу терминала да креирате кориснички модул АПИ-ја.

     nest g module users 

    ЦЛИ алатка аутоматски ажурира датотеку апп.модуле.тс како би одражавала направљене промене, поред креирања корисничког модула. Ово осигурава да је новокреирани модул, корисници, правилно интегрисан у конфигурацију модула апликације.

      Како играти Сплитгате (Бета) на Линуку

    Креирајте кориснички ентитет

    ТипеОРМ је библиотека објектно-релационог мапирања (ОРМ) која поједностављује интеракције базе података у апликацијама које користе ТипеСцрипт мапирањем ЈаваСцрипт објеката у табеле базе података.

    Креирањем ентитета Усер користећи ТипеОРМ, дефинишете структуру и својства корисничких података у ПостгреСКЛ бази података.

    У директоријуму корисника креирајте нови моделс/усер.ентити.тс и додајте следећи код.

     import { Entity, PrimaryGeneratedColumn, Column, } from "typeorm";

    @Entity()
    export class User {
        @PrimaryGeneratedColumn()
        id: number;

        @Column()
        name: string;

        @Column()
        email: string;
    }

    Ентитет Корисник дефинише структуру корисничких података који се чувају у бази података. У овом случају, то је ид као колона примарног кључа, колоне са именом и е-поштом и њихова одговарајућа својства.

    Креирајте ЦРУД АПИ услугу

    Сада креирајте АПИ услугу која ће управљати логиком за ЦРУД операције тако што ћете покренути наредбу испод:

     nest g service users 

    Отворите датотеку усер-аутх.сервице.тс и додајте овај код:

     import { Injectable } from '@nestjs/common';
    import { InjectRepository } from '@nestjs/typeorm';
    import { Repository } from 'typeorm';
    import {User} from './models/user.entity';

    @Injectable()
    export class UsersService {
      constructor(
        @InjectRepository(User)
        private userRepository: Repository<User>,
      ) {}

      async findAll(): Promise<User[]> {
        return this.userRepository.find();
      }

      async findOne(id: number): Promise<User> {
        return this.userRepository.findOne({ where: { id } });
      }

      async create(user: Partial<User>): Promise<User> {
        const newuser = this.userRepository.create(user);
        return this.userRepository.save(newuser);
      }

      async update(id: number, user: Partial<User>): Promise<User> {
        await this.userRepository.update(id, user);
        return this.userRepository.findOne({ where: { id } });
      }

      async delete(id: number): Promise<void> {
        await this.userRepository.delete(id);
      }
    }

    Ова класа УсерсСервице дефинише различите АПИ методе намењене руковању ЦРУД операцијама. Ове методе укључују преузимање података свих корисника, проналажење одређеног корисника помоћу његовог ИД броја, креирање новог корисника, ажурирање постојећег корисника и метод за брисање података одређеног корисника у бази података.

    Дефинишите контролер за АПИ

    Креирајте контролер који ће управљати крајњим тачкама АПИ-ја за операције које се односе на кориснике.

     nest g controller users 

    Затим додајте код испод у датотеку усерс.цонтроллер.тс.

     import { Controller, Get, Post, Body, Put, Param, Delete, NotFoundException, HttpCode } from '@nestjs/common';
    import { UsersService } from './users.service';
    import { User } from './models/user.entity';

    @Controller('api/users')
    export class UsersController {
      constructor(private readonly usersService: UsersService) {}

      @Get()
      async findAll(): Promise<User[]> {
        return this.usersService.findAll();
      }

      @Post()
      @HttpCode(201)
      async create(@Body() user: User): Promise<User> {
        const createdUser = await this.usersService.create(user);
        return createdUser;
      }

      @Put(':id')
      async update (@Param('id') id: number, @Body() user: User): Promise<any> {
        await this.usersService.update(id, user);
        return { message: 'User updated successfully' };
      }

      @Delete(':id')
      async delete(@Param('id') id: number): Promise<any> {
        const user = await this.usersService.findOne(id);

        if (!user) {
          throw new NotFoundException('User does not exist!');
        }

        await this.usersService.delete(id);
        return { message: 'User deleted successfully' };
      }
    }

    Контролер управља крајњим тачкама АПИ-ја за корисничке операције. Обрађује ГЕТ захтеве за преузимање свих корисника, ПОСТ захтеве за креирање нових корисника, ПУТ захтеве за ажурирање постојећих корисника и ДЕЛЕТЕ захтеве за брисање корисника.

      Поправи грешку недоступног Фацебоок прилога

    Користећи УсерсСервице и интеракцију са ентитетом Усер, овај контролер обезбеђује комплетан АПИ за управљање операцијама које се односе на кориснике на подацима ускладиштеним у бази података.

    Ажурирајте датотеку усерс.модуле.тс

    На крају, ажурирајте датотеку усерс.модуле.тс као што је приказано у наставку да бисте били сигурни да сте уградили ентитет Усер и модул ТипеОРМ, који успоставља везу са базом података.

     import { Module } from '@nestjs/common';
    import { UsersController } from './users.controller';
    import { UsersService } from './users.service';
    import { TypeOrmModule } from '@nestjs/typeorm';
    import { User } from './models/user.entity';

    @Module({
      imports: [TypeOrmModule.forFeature([User])],
      controllers: [UsersController],
      providers: [UsersService]
    })

    export class UsersModule {}

    Коначно, наставите и покрените развојни сервер да бисте тестирали ЦРУД операције користећи Постман.

     npm run start 

    Сервер ће се покренути на порту 3000 и можете му послати АПИ захтеве на хттп://лоцалхост:3000/апи/усерс.

    Израда позадинских апликација помоћу Нест.јс

    Без обзира да ли развијате једноставан РЕСТ АПИ или сложену веб апликацију, Нест.јс нуди свеобухватан скуп функција и могућности за конструисање поузданог и робусног позадинског система.

    Нест.јс нуди структуриранији приступ развоју пројекта него Екпресс.јс. Ово осигурава да можете поуздано да правите, скалирате и одржавате сложене апликације, захваљујући његовом организованом и модуларном обрасцу дизајна.