Urmați acest tutorial pentru a afla despre câteva tehnologii interesante și complementare pe care le puteți utiliza pentru următorul dvs. proiect.

Ca și alte cadre Node.js, Nest.js oferă un set de instrumente cuprinzător pentru construirea de servicii backend robuste și scalabile. Cu toate acestea, este important să înțelegeți cum să implementați crearea, citirea, actualizarea și ștergerea (CRUD) operațiuni în Nest.js în mod eficient - acestea sunt cele mai fundamentale operațiuni din dezvoltare a API-urilor.

Aflați cum să creați un API CRUD REST Nest.js folosind TypeORM și o bază de date PostgreSQL.

Noțiuni introductive cu Nest.js

Pentru a începe, instalați instrumentul de linie de comandă Nest.js:

npm i -g @nestjs/cli

Apoi, creați un nou proiect rulând:

nest new crud-app

Instrumentul CLI vă va solicita să alegeți un manager de pachete, să alegeți opțiunea pe care o considerați cea mai preferată. Vom folosi npm, managerul de pachete Node.

CLI va schelă un proiect Nest.js de bază cu toate fișierele de configurare necesare și dependențele inițiale necesare pentru a rula aplicația.

instagram viewer

În cele din urmă, navigați la directorul de proiect și porniți serverul de dezvoltare.

cd crud-app
npm run start

Puteți găsi codul acestui proiect în documentul său GitHub repertoriu.

Creați o bază de date PostgreSQL

Acest tutorial folosește o instanță PostgreSQL în cloud, dar puteți configura o bază de date locală PostgreSQL. Puteți instalați PostgreSQL pe Windows, pe macOS, sau pe Linux.

Pentru a configura o instanță PostgreSQL în cloud:

  1. Du-te la ElephantSQL, înscrieți-vă și conectați-vă la pagina de prezentare generală a contului dvs.
  2. Apasă pe Creați o nouă instanță butonul din secțiunea din stânga sus a paginii pentru a crea o instanță nouă pentru aplicația dvs.
  3. Completați numele instanței dvs., alegeți planul gratuit și, în final, selectați regiunea pentru a finaliza procesul de configurare.
  4. După crearea instanței bazei de date, accesați setări pagina și copiați cea furnizată URL-ul bazei de date.

Configurați conexiunea la baza de date

În directorul rădăcină al proiectului, creați un .env fișier și inserați adresa URL a conexiunii la baza de date, după cum urmează:

DATABASE_URL=""

Acum instalați aceste pachete:

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

Apoi, continuați și creați un modul de bază de date folosind instrumentul CLI.

baza de date a modulelor nest g

Deschide database/database.module.ts fișier și adăugați următorul cod de configurare a bazei de date:

import { Modulul } din„@nestjs/common”;
import { ConfigModule, ConfigService } din„@nestjs/config”;
import { TypeOrmModule } din„@nestjs/typeorm”;
import { Utilizator } din„../users/models/user.entity”;

@Modul({
importuri: [
TypeOrmModule.forRootAsync({
importuri: [ConfigModule],
injectați: [ConfigService],

useFactory: asincron (configService: ConfigService) => ({
tip: "postgres",
url: configService.get(„DATABASE_URL”),
entități: [Utilizator],
sincroniza: Adevărat
}),
}),
],
})

exportclasă DatabaseModule {}

Acest modul de bază de date gestionează conexiunea prin configurarea modulului TypeORM cu parametrul de conexiune necesar, adresa URL a bazei de date.

În plus, definește entitatea Utilizator ca parte a configurației care specifică structura și proprietățile datelor stocate în tabelul bazei de date PostgreSQL.

În această etapă, codul dvs. va genera probabil o eroare deoarece nu ați creat încă entitatea utilizatorilor. Veți face asta în următorii pași.

Actualizați fișierul app.module.ts

În cele din urmă, actualizați modulul principal al aplicației pentru a include configurația pentru modulul bazei de date.

import { Modulul } din„@nestjs/common”;
import { ConfigModule } din„@nestjs/config”;
import { AppController } din„./app.controller”;
import { AppService } din„./app.service”;
import { DatabaseModule } din'./database/database.module';

@Modul({
importuri: [
ConfigModule.forRoot({
envFilePath: „.env”,
}),
DatabaseModule,
],

controlere: [AppController],
furnizori: [AppService],
})

exportclasă AppModule {}

Definiți un modul de utilizatori

Modulul utilizatori servește ca o componentă centralizată, responsabilă pentru încapsularea și gestionarea logicii necesare implementării funcționalității CRUD a API-ului.

Rulați această comandă de terminal pentru a crea modulul utilizatori al API-ului.

utilizatorii modulului nest g

Instrumentul CLI actualizează automat aplicație.modul.ts fișier pentru a reflecta modificările efectuate, pe lângă crearea modulului utilizator. Acest lucru asigură că modulul nou creat, utilizatorii, este integrat corespunzător în configurația modulului aplicației.

Creați o entitate utilizator

TypeORM este o bibliotecă ORM (Object-Relational Mapping) care simplifică interacțiunile cu bazele de date în aplicațiile care utilizează TypeScript prin maparea obiectelor JavaScript la tabelele bazei de date.

Prin crearea unei entități utilizator folosind TypeORM, definiți structura și proprietățile datelor utilizatorului din baza de date PostgreSQL.

În directorul utilizatorilor, creați un nou modele/utilizator.entitate.ts și adăugați următorul cod.

import { Entity, PrimaryGeneratedColumn, Column, } din"tipoorm";

@Entitate()
exportclasă Utilizator {
@PrimaryGeneratedColumn()
id: număr;

@Coloană()
Nume: şir;

@Coloană()
e-mail: şir;
}

The Utilizator entitatea definește structura datelor utilizator stocate în baza de date. În acest caz, acesta este id ca coloană cheie primară și Nume și e-mail coloane și proprietățile lor corespunzătoare.

Creați serviciul API CRUD

Acum, creați serviciul API care va gestiona logica operațiunilor CRUD rulând comanda de mai jos:

utilizatorii serviciului nest g

Deschide user-auth.service.ts fișier și adăugați acest cod:

import { injectabil } din„@nestjs/common”;
import { InjectRepository } din„@nestjs/typeorm”;
import { Depozit } din„tipoorm”;
import {Utilizator} din„./models/user.entity”;

@Injectabil()
exportclasă UsersService {
constructor(
@InjectRepository(Utilizator)
privat userRepository: Repository,
) {}

asincron Găsiți toate(): Promisiune {
întoarcereacest.userRepository.find();
}

asincron findOne (id: număr): Promisiune {
întoarcereacest.userRepository.findOne({ unde: { id } });
}

asincron creați (utilizator: parțial): Promisiune {
const utilizator nou = acest.userRepository.create (utilizator);
întoarcereacest.userRepository.save (utilizator nou);
}

asincron actualizare (id: număr, utilizator: Parțial): Promisiune {
așteaptăacest.userRepository.update (id, utilizator);
întoarcereacest.userRepository.findOne({ unde: { id } });
}

asincronșterge(id: număr): Promisiune<gol> {
așteaptăacest.userRepository.delete (id);
}
}

Această clasă UsersService definește diverse metode API dedicate gestionării operațiunilor CRUD. Aceste metode includ preluarea datelor tuturor utilizatorilor, găsirea unui anumit utilizator folosind numărul său de identificare, crearea un utilizator nou, actualizarea unui utilizator existent și o metodă de ștergere a datelor unui anumit utilizator din baza de date.

Definiți un controler pentru API

Creați un controler care va gestiona punctele finale API pentru operațiunile legate de utilizator.

utilizatorii de controler nest g

Apoi, adăugați codul de mai jos la utilizatorii.controller.ts fişier.

import { Controller, Get, Post, Body, Put, Param, Delete, NotFoundException, HttpCode } din„@nestjs/common”;
import { UsersService } din„./users.service”;
import { Utilizator } din„./models/user.entity”;

@Controlor(„api/utilizatori”)
exportclasă UsersController {
constructor(privat readonly usersService: UsersService) {}

@Obține()
asincron Găsiți toate(): Promisiune {
întoarcereacest.usersService.findAll();
}

@Post()
@HttpCode(201)
asincron crea(@Corp() utilizator: utilizator): Promisiune {
const createUser = așteaptăacest.usersService.create (utilizator);
întoarcere creatUtilizator;
}

@A pune(':id')
asincron Actualizați (@Param('id') id: număr, @Corp() utilizator: utilizator): Promisiune<orice> {
așteaptăacest.usersService.update (id, utilizator);
întoarcere { mesaj: „Utilizatorul a fost actualizat cu succes” };
}

@Șterge(':id')
asincronșterge(@Param('id') id: număr): Promisiune<orice> {
const utilizator = așteaptăacest.usersService.findOne (id);

dacă (!utilizator) {
aruncanou NotFoundException('Utilizatorul nu exista!');
}

așteaptăacest.usersService.delete (id);
întoarcere { mesaj: „Utilizatorul a fost șters cu succes” };
}
}

Controlerul gestionează punctele finale API pentru operațiunile utilizatorului. Se ocupă de solicitările GET pentru a prelua toți utilizatorii, solicitările POST pentru a crea utilizatori noi, solicitările PUT pentru a actualiza utilizatorii existenți și solicitările DELETE pentru ștergerea utilizatorilor.

Prin utilizarea UsersService și interacționând cu Utilizator entitate, acest controlor oferă un API complet pentru gestionarea operațiunilor legate de utilizator cu privire la datele stocate în baza de date.

Actualizați fișierul users.module.ts

În cele din urmă, actualizați utilizatori.modul.ts după cum se arată mai jos pentru a vă asigura că includeți fișierul Entitate utilizator și modulul TypeORM, care stabilește conexiunea la baza de date.

import { Modulul } din„@nestjs/common”;
import { UsersController } din„./users.controller”;
import { UsersService } din„./users.service”;
import { TypeOrmModule } din„@nestjs/typeorm”;
import { Utilizator } din„./models/user.entity”;

@Modul({
importuri: [TypeOrmModule.forFeature([Utilizator])],
controlere: [UsersController],
furnizori: [UsersService]
})

exportclasă UsersModule {}

În cele din urmă, mergeți mai departe și porniți serverul de dezvoltare pentru a testa operațiunile CRUD folosind Postman.

npm run start

Serverul va porni pe portul 3000 și îi puteți trimite cereri API la http://localhost: 3000/api/utilizatori.

Crearea de aplicații backend cu Nest.js

Indiferent dacă dezvoltați o API REST simplă sau o aplicație web complexă, Nest.js oferă un set cuprinzător de caracteristici și capabilități pentru a construi un sistem backend fiabil și robust.

Nest.js oferă o abordare mai structurată a dezvoltării proiectelor decât Express.js. Acest lucru vă asigură că puteți construi, scala și menține cu încredere aplicații complexe, datorită modelului său de design organizat și modular.