рдорд┐рд▓рд┐рдП NestJS рд╕реЗ

Node.js рдбреЗрд╡рд▓рдкрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рд╢реБрднрд╛рд░рдВрдн рд╕реЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред




рдЖрдзреБрдирд┐рдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╛рд╕ рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдпрд╣ рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рдЕрдиреНрдп рд╕рд░реНрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИред рдиреЛрдб рдПрдХ рдЕрддреНрдпрдВрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд┐рдХрд▓реНрдк рдмрди рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдордЬрдмреВрдд рднрд╛рд╖рд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдЬреЛ рдЖрдзреБрдирд┐рдХ рд╡рд╕реНрддреБ рдЙрдиреНрдореБрдЦ рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдЖрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╕реА #, рд╕реА ++ рдпрд╛ рдЬрд╛рд╡рд╛ред рдпрджрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд┐рд░реНрдл NodeJS рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ , рддреЛ NestJS рдлреНрд░реЗрдорд╡рд░реНрдХ рдПрдХ рдкреВрд░реЗ рдирдП рд╕реНрддрд░ рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдШрдЯрдХреЛрдВ, рдкреНрд░рджрд╛рддрд╛рдУрдВ, рдореЙрдбреНрдпреВрд▓реЛрдВ рдФрд░ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЧрд░реНрднрдкрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд┐рдХрд╛рдК рдФрд░ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдХреЗрдВрдб рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдЖрдзреБрдирд┐рдХ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдореВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП NestJS рдкрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ: рд╕реБрдкрд░рдорд╛рд░реНрдХреЗрдЯ рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рд╕реВрдЪреА рдмрдирд╛рдирд╛, рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдФрд░ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред
рдпрджрд┐ рдЖрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдорд╛рдг


рдиреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдиреЛрдб рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЙрдирдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ ред

рдврд╛рдВрдЪрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:

$ npm i -g @nestjs/cli

рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдиреЗрд╕реНрдЯ CLI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛:

$ nest new nest-js-example

рдРрд╕реА рдЯреАрдо рдЖрд╡рд╢реНрдпрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ, рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╕рд░реНрд╡рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдпрд╛ рдиреЗрд╕реНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдЧреАред

рдЖрд╡реЗрджрди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ


рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдФрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдореБрдЦреНрдп рдлрд╛рдЗрд▓ рд╣реИ src/main.ts:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
	
    const app = await NestFactory.create(AppModule);
    await app.listen(3000);
}

bootstrap();

рдпрд╣ рдлрд╝рд╛рдЗрд▓ NestFactory рд╡рд░реНрдЧ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддреА рд╣реИ , рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдореБрдЦреНрдп AppModule рдлрд╝рд╛рдЗрд▓ (рдЬреЛ рд╣рдо рдЬрд▓реНрдж рд╣реА рдорд┐рд▓реЗрдВрдЧреЗ), рдФрд░ рдлрд┐рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдкреЛрд░реНрдЯ 3000 рдкрд░ рд╕реБрдирддрд╛ рд╣реИред

рдРрдк рдореЙрдбреНрдпреВрд▓


рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдШрдЯрдХ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ src/app.module.ts:

import { Module } from '@nestjs/common';
import { ItemsController } from './items/items.controller';
import { ItemsService } from './items/items.service';

@Module({
    imports: [],
    controllers: [ ItemsController ],
    providers: [ ItemsService ],
})

export class AppModule {}

рдпрд╣ рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд╣рд╛рдВ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдкрд┐рдЫрд▓реА рдлрд╝рд╛рдЗрд▓ ( main.ts ) рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдиреЗрд╕реНрдЯ CLI рдЙрдкрдХрд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬрдм рдПрдХ рдирдпрд╛ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рджрд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рдЕрджреНрдпрддрди рдХрд░реЗрдЧрд╛ред рдпрд╣рд╛рдВ, рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рд╕реЗрд╡рд╛ рдХреЛ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдЗрдЯрдо рдирд┐рдпрдВрддреНрд░рдХ


рдЕрдЧрд▓реА рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕рдХреА рд╣рдо рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ src/items/items.controller.ts:

import { Controller, Req, Get, Post, Body } from '@nestjs/common'
import { CreateItemDto } from './dto/create-item.dto'
import { ItemsService } from './items.service'
import { Item } from './items.interface'

@Controller('items')
export class ItemsController {

    constructor(private readonly itemsService: ItemsService) {}

    @Post()
    create(@Body() data: CreateItemDto): Object {
        return this.itemsService.create(data)
    }

    @Get()
    findAll(): Array<Item> {
        return this.itemsService.findAll()
    }
}

рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЖрдЗрдЯрдо рдмрдирд╛рдиреЗ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП рд▓реЛрдЧреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИред рдХрдИ рдкреНрд░рдореБрдЦ рдШрдЯрдХ рдпрд╣рд╛рдВ рдЖрдпрд╛рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:

  • CreateItemDto : рдПрдХ рдбреЗрдЯрд╛-рдЯреНрд░рд╛рдВрд╕рдлрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЖрдЗрдЯрдо рдбреЗрдЯрд╛ рдХреИрд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ (рдпрд╛рдиреА рдпрд╣ рдПрдХ JSON рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ);
  • рдЖрдЗрдЯрдо рд╕реЗрд╡рд╛: рдкреНрд░рджрд╛рддрд╛ рдЬреЛ рдЖрдЗрдЯрдо рдбреЗрдЯрд╛ рдХреЗ рд╣реЗрд░рдлреЗрд░ рдпрд╛ рднрдВрдбрд╛рд░рдг рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ ;
  • рдЖрдЗрдЯрдо : рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ ;

рдбреЗрдХреЛрд░реЗрдЯрд░ @Controller('items')рдврд╛рдВрдЪреЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдмрд╛рдХреА / рд╕реЗрд╡рд╛ рдХрд░реЗрдВрдЧреЗ рдЖрдЗрдЯрдо endpoint , рдФрд░ ItemsController рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реЗрддрд╛ ItemsService , рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рджреЛ HTTP рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП:

  • POST / рдЖрдЗрдЯрдо (JSON рдЕрдиреБрд░реЛрдз рд╕реЗ рдПрдХ рдирдпрд╛ рдЖрдЗрдЯрдо рдмрдирд╛рддрд╛ рд╣реИ);
  • рдкреНрд░рд╛рдкреНрдд / рдЖрдЗрдЯрдо (рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛)ред

рдЗрди рджреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдмрдирд╛рдПрдБ рдФрд░ FindAll рд╡рд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ @Post()рдФрд░ рдбреЗрдХреЛрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд HTTP рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реИрдВ @Get()ред рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реАрдХреЛрдВ рдХреЛ рдбреЗрдХреЛрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рднреА рдЗрд╕реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, @Put()рдпрд╛ @Delete(), рдЖрджрд┐ред

рдЖрдЗрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрдВрдЯрд░рдлреЗрд╕


рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рджреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдХрд░рддреЗ рд╣реИрдВ , рдЬреЛ рднрдВрдбрд╛рд░рдг рдХреА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИрдВ , рдПрдХ рдЖрдВрддрд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ рд╕рдВрдХрд▓рди рд╕рдордп ( рдЖрдЗрдЯрдо ) рдкрд░ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ , рдФрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ JSON рдХреА рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд╣рд░реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ ( CreateItemDto):

export interface Item {
	
    name: string,
    description: string,
    price: number
}

export class CreateItemDto {

    @IsNotEmpty()
    readonly name: string;

    @IsNotEmpty()
    readonly description: string;

    @IsNotEmpty()
    readonly price: number;
}

рдЖрдЗрдЯрдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕реНрдЯреЛрд░ рдЙрддреНрдкрд╛рдж рдХреЗ рддреАрди рдЧреБрдгреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ: рдирд╛рдо, рд╡рд┐рд╡рд░рдг рдФрд░ рдореВрд▓реНрдпред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╡рд╕реНрддреБ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдХреНрдпрд╛ рдЧреБрдг рд╣реИрдВ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рдХреЛрдИ рднреНрд░рдо рдирд╣реАрдВ рд╣реИред CreateItemDto

рд╡рд░реНрдЧ рдЖрдЗрдЯрдо рдЧреБрдгреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ , рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпреЗ рд╕рднреА рдЧреБрдг REST API рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЧрдП рд╣реИрдВред@IsNotEmpty()

рджреЛрдиреЛрдВ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рднреА рдЧреБрдгреЛрдВ рдХреЛ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдЗрд╕рд▓рд┐рдП рдирд╛рдо) рдХреЗ рдореБрдЦреНрдп рд▓рд╛рднреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдпрд╣ рд╕рдВрджрд░реНрдн рдХреА рд╕рдордЭ рдХреЗ рд╕реНрддрд░ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЯреВрд▓ (рдЬреИрд╕реЗ VSCode рдореЗрдВ IntelliSense) рдХреЗ рд╕рд╛рде рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рдордп рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реИрдХрдбрд╝реЛрдВ рдпрд╛ рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдЧреЛрдВ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╣рдЬрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдЪ рд╣реИред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдЕрдирдВрдд рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдкреВрд░реНрдг рдлреЛрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдореЗрдореЛрд░реА рдирд╣реАрдВ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рд▓рд┐рдП), рд╣рдЬрд╛рд░реЛрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

рдЖрдЗрдЯрдо рд╕реЗрд╡рд╛


рд╕рдмрд╕реЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдмрдирд╛рдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рд╣реИ items: items.service.dart:

import { Injectable } from '@nestjs/common'
import { Item } from './items.interface'

@Injectable()
export class ItemsService {

    private items: Array<Item> = []

    create(item: Item): Object {

        this.items.push(item) 
        return { id: this.items.length.toString() }
    }

    findAll(): Array<Item> {

        return this.items;
    }
}

ItemService рд╡рд░реНрдЧ рдЖрдЗрдЯрдо рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕рд░рд▓ рд╕рд░рдгреА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдирдореВрдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЗрди-рдореЗрдореЛрд░реА рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЗрд╕ рднрдВрдбрд╛рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ:

  • рдмрдирд╛рдПрдБ ( рд╕реВрдЪреА рдореЗрдВ рдЖрдЗрдЯрдо рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЖрдИрдбреА рд▓реМрдЯрд╛рддрд╛ рд╣реИ);
  • findAll (рдкреВрд░реНрд╡ рдирд┐рд░реНрдорд┐рдд рдЖрдЗрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рддрд╛ рд╣реИ )ред

рдкрд░рд┐рдХреНрд╖рдг


рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ npm рд░рди рд╕реНрдЯрд╛рд░реНрдЯ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ CURL рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ HTTP рдЕрдиреБрд░реЛрдз рднреЗрдЬрдХрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ :

$ curl -X POST localhost:3000/items -d '{"name":"trinket", "description":"whatever", "price": 42.0}'

рдЗрд╕ рдЖрджреЗрд╢ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЖрдЗрдЯрдо рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдПрдХ JSON рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреА ред рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ, рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

$ curl localhost:3000/items

/ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GET рдЕрдиреБрд░реЛрдз рдЖрдЗрдЯрдо рдКрдкрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ JSON рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреА рдЖрдЗрдЯрдо рд╣реИ рдХрд┐ рд╕реНрдореГрддрд┐ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЬрд╡рд╛рдм рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

[{"{\"name\":\"trinket\", \"description\":\"whatever\", \"price\": 42.0}":""}]

рдирд┐рд╖реНрдХрд░реНрд╖


NestJS рдмреИрдХрдПрдВрдб рд╡рд┐рдХрд╛рд╕ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдП рд╕рдорд╛рдзрд╛рди, рдЬрд▓реНрджреА рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рд╕реЗрд╡рд╛рдУрдВ рд╣реИ рдХрд┐ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдзреБрдирд┐рдХ рдЖрд╡реЗрджрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдФрд░ рдкрд╛рд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рд╣реИ рдареЛрд╕ рдФрд░ рдХреЗ рдЖрд╡реЗрджрди рдмрд╛рд░рд╣ рдХрд╛рд░рдХреЛрдВ ред

рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, NestJS рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдПрдБ ред
рдореЗрд░рд╛ рдЖрд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╣реИрдкреНрдкреА рдХреЛрдбрд┐рдВрдЧ!

All Articles