Sledite tej vadnici, če želite izvedeti več o nekaterih vznemirljivih, dopolnilnih tehnologijah, ki jih lahko uporabite za svoj naslednji projekt.

Tako kot druga ogrodja Node.js tudi Nest.js ponuja obsežen nabor orodij za gradnjo robustnih in razširljivih zalednih storitev. Kljub temu je pomembno razumeti, kako izvajati ustvarjanje, branje, posodabljanje in brisanje (CRUD) učinkovite operacije v Nest.js – to so najbolj temeljne operacije v razvoju API-jev.

Naučite se zgraditi API Nest.js CRUD REST z uporabo TypeORM in baze podatkov PostgreSQL.

Kako začeti z Nest.js

Za začetek namestite orodje ukazne vrstice Nest.js:

npm i -g @nestjs/cli

Nato ustvarite nov projekt tako, da zaženete:

ugnezdite novo crud-aplikacijo

Orodje CLI vas bo pozvalo, da izberete upravitelja paketov, izberite možnost, ki se vam zdi najprimernejša. Bomo uporabili npm, upravitelj paketov Node.

CLI bo oblikoval osnovni projekt Nest.js z vsemi zahtevanimi konfiguracijskimi datotekami in začetnimi odvisnostmi, potrebnimi za zagon aplikacije.

Na koncu se pomaknite do imenika projekta in zaženite razvojni strežnik.

cd crud-app
npm zagon zagon

Kodo tega projekta najdete v GitHub repozitorij.

Ustvarite bazo podatkov PostgreSQL

Ta vadnica uporablja primerek PostgreSQL v oblaku, vendar lahko namesto tega nastavite lokalno bazo podatkov PostgreSQL. Ti lahko namestite PostgreSQL v sistem Windows, na macOS, ali v sistemu Linux.

Če želite nastaviti primerek PostgreSQL v oblaku:

  1. Pojdite na ElephantSQL, se prijavite in prijavite na stran s pregledom svojega računa.
  2. Kliknite na Ustvari nov primerek v zgornjem levem delu strani, da ustvarite nov primerek za svojo aplikacijo.
  3. Vnesite ime svojega primerka, izberite brezplačen načrt in na koncu izberite regijo, da dokončate postopek namestitve.
  4. Ko ustvarite primerek zbirke podatkov, pojdite na nastavitve strani in kopirajte priloženo URL baze podatkov.

Konfigurirajte povezavo z bazo podatkov

V korenskem imeniku vašega projekta ustvarite a .env datoteko in prilepite URL povezave z bazo podatkov, kot sledi:

DATABASE_URL=""

Zdaj namestite te pakete:

npm namestite pg typeorm @nestjs/typeorm @nestjs/config

Nato nadaljujte in ustvarite modul zbirke podatkov z orodjem CLI.

zbirka podatkov modula nest g

Odprite baza podatkov/baza podatkov.modul.ts in dodajte naslednjo konfiguracijsko kodo baze podatkov:

uvoz { Modul } od'@nestjs/common';
uvoz {ConfigModule, ConfigService} od'@nestjs/config';
uvoz { TypeOrmModule } od'@nestjs/typeorm';
uvoz { Uporabnik } od'../users/models/user.entity';

@Modul({
uvoz: [
TypeOrmModule.forRootAsync({
uvozi: [ConfigModule],
inject: [ConfigService],

useFactory: asinh (configService: ConfigService) => ({
vrsta: 'postgres',
url: configService.get('DATABASE_URL'),
subjekti: [Uporabnik],
sinhroniziraj: prav
}),
}),
],
})

izvozrazred DatabaseModule {}

Ta modul zbirke podatkov obravnava povezavo tako, da konfigurira modul TypeORM z zahtevanim parametrom povezave, URL-jem baze podatkov.

Poleg tega definira entiteto Uporabnik kot del konfiguracije, ki določa strukturo in lastnosti podatkov, shranjenih v tabeli baze podatkov PostgreSQL.

Na tej stopnji bo vaša koda verjetno vrgla napako, ker še niste ustvarili entitete uporabnikov. To boste storili v naslednjih korakih.

Posodobite datoteko app.module.ts

Na koncu posodobite modul glavne aplikacije, da bo vključeval konfiguracijo za modul baze podatkov.

uvoz { Modul } od'@nestjs/common';
uvoz { ConfigModule } od'@nestjs/config';
uvoz { AppController } od'./app.controller';
uvoz { AppService } od'./app.service';
uvoz { DatabaseModule } od'./database/database.module';

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

krmilniki: [AppController],
ponudniki: [AppService],
})

izvozrazred AppModule {}

Definirajte uporabniški modul

Uporabniški modul služi kot centralizirana komponenta, ki je odgovorna za enkapsulacijo in upravljanje logike, potrebne za implementacijo funkcionalnosti CRUD API-ja.

Zaženite ta terminalski ukaz, da ustvarite uporabniški modul API-ja.

uporabniki modula nest g

Orodje CLI samodejno posodobi app.module.ts datoteko, ki odraža opravljene spremembe, poleg ustvarjanja uporabniškega modula. To zagotavlja, da je na novo ustvarjen modul, uporabniki, pravilno integriran v konfiguracijo modula aplikacije.

Ustvarite uporabniško entiteto

TypeORM je knjižnica Object-Relational Mapping (ORM), ki poenostavlja interakcije baze podatkov v aplikacijah, ki uporabljajo TypeScript, s preslikavo objektov JavaScript v tabele baze podatkov.

Z ustvarjanjem uporabniške entitete z uporabo TypeORM definirate strukturo in lastnosti uporabniških podatkov v zbirki podatkov PostgreSQL.

V imeniku uporabnikov ustvarite nov models/user.entity.ts in dodajte naslednjo kodo.

uvoz {Entity, PrimaryGeneratedColumn, Column,} od"typeorm";

@Entiteta()
izvozrazred uporabnik {
@PrimaryGeneratedColumn()
id: število;

@Stolpec()
ime: vrvica;

@Stolpec()
E-naslov: vrvica;
}

The Uporabnik entiteta definira strukturo uporabniških podatkov, shranjenih v bazi podatkov. V tem primeru je to id kot stolpec primarnega ključa in ime in E-naslov stolpce in njihove ustrezne lastnosti.

Ustvarite storitev CRUD API

Zdaj ustvarite storitev API, ki bo upravljala logiko za operacije CRUD, tako da zaženete spodnji ukaz:

uporabniki storitve nest g

Odprite uporabnik-auth.service.ts datoteko in dodajte to kodo:

uvoz { Za injiciranje } od'@nestjs/common';
uvoz {InjectRepository} od'@nestjs/typeorm';
uvoz {Repozitorij} od'typeorm';
uvoz {Uporabnik} od'./models/user.entity';

@Za injiciranje()
izvozrazred UsersService {
konstruktor(
@InjectRepository(Uporabnik)
zasebno userRepository: Repozitorij,
) {}

asinh poiščiVse(): Obljuba {
vrnitevto.userRepository.find();
}

asinh findOne (id: število): Obljuba {
vrnitevto.userRepository.findOne({ kjer: { id } });
}

asinh ustvari (uporabnik: delno): Obljuba {
konst nov uporabnik = to.userRepository.create (uporabnik);
vrnitevto.userRepository.save (nov uporabnik);
}

asinh posodobitev (id: število, uporabnik: Delno): Obljuba {
čakatito.userRepository.update (id, uporabnik);
vrnitevto.userRepository.findOne({ kjer: { id } });
}

asinhizbrisati(id: število): Obljuba<praznina> {
čakatito.userRepository.delete (id);
}
}

Ta razred UsersService definira različne metode API-ja, namenjene upravljanju operacij CRUD. Te metode vključujejo pridobivanje podatkov vseh uporabnikov, iskanje določenega uporabnika z uporabo njegove ID številke, ustvarjanje novega uporabnika, posodobitev obstoječega uporabnika in način za brisanje podatkov določenega uporabnika v bazi.

Definirajte krmilnik za API

Ustvarite krmilnik, ki bo upravljal končne točke API-ja za operacije, povezane z uporabniki.

uporabniki krmilnika nest g

Nato dodajte spodnjo kodo v users.controller.ts mapa.

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

@Krmilnik('api/uporabniki')
izvozrazred UsersController {
konstruktor(zasebno samo za branje usersService: UsersService) {}

@Get()
asinh poiščiVse(): Obljuba {
vrnitevto.usersService.findAll();
}

@Objava()
@HttpCode(201)
asinh ustvari (@Telo() uporabnik: uporabnik): Obljuba {
konst createdUser = čakatito.usersService.create (uporabnik);
vrnitev createdUser;
}

@Postavi(':id')
asinh nadgradnja (@Param('id') id: število, @Telo() uporabnik: uporabnik): Obljuba<kaj> {
čakatito.usersService.update (id, uporabnik);
vrnitev { sporočilo: 'Uporabnik je bil uspešno posodobljen' };
}

@Izbriši(':id')
asinhizbrisati(@Param('id') id: število): Obljuba<kaj> {
konst uporabnik = čakatito.usersService.findOne (id);

če (!uporabnik) {
metatinovo NotFoundException('Uporabnik ne obstaja!');
}

čakatito.usersService.delete (id);
vrnitev { sporočilo: 'Uporabnik uspešno izbrisan' };
}
}

Krmilnik upravlja končne točke API za uporabniške operacije. Obravnava zahteve GET za pridobitev vseh uporabnikov, zahteve POST za ustvarjanje novih uporabnikov, zahteve PUT za posodobitev obstoječih uporabnikov in zahteve DELETE za brisanje uporabnikov.

Z uporabo UsersService in interakcijo z Uporabnik entitete, ta krmilnik ponuja popoln API za upravljanje operacij, povezanih z uporabniki, na podatkih, shranjenih v bazi podatkov.

Posodobite datoteko users.module.ts

Na koncu posodobite uporabniki.modul.ts datoteko, kot je prikazano spodaj, da zagotovite vključitev Uporabniška entiteta in modul TypeORM, ki vzpostavi povezavo z bazo podatkov.

uvoz { Modul } od'@nestjs/common';
uvoz {UsersController} od'./users.controller';
uvoz { UsersService } od'./users.service';
uvoz { TypeOrmModule } od'@nestjs/typeorm';
uvoz { Uporabnik } od'./models/user.entity';

@Modul({
uvozi: [TypeOrmModule.forFeature([User])],
krmilniki: [UsersController],
ponudniki: [UsersService]
})

izvozrazred Uporabniški modul {}

Končno nadaljujte in zavrtite razvojni strežnik, da preizkusite operacije CRUD s pomočjo Postmana.

npm zagon zagon

Strežnik se bo zagnal na vratih 3000 in nanj lahko pošljete zahteve za API http://localhost: 3000/api/uporabnikov.

Gradnja zalednih aplikacij z Nest.js

Ne glede na to, ali razvijate preprost API REST ali kompleksno spletno aplikacijo, Nest.js ponuja obsežen nabor funkcij in zmožnosti za izdelavo zanesljivega in robustnega zalednega sistema.

Nest.js ponuja bolj strukturiran pristop k razvoju projektov kot Express.js. To zagotavlja, da lahko samozavestno gradite, prilagajate in vzdržujete kompleksne aplikacije, zahvaljujoč organiziranemu in modularnemu vzorcu načrtovanja.