Volg deze tutorial om meer te weten te komen over enkele opwindende, aanvullende technologieën die u kunt gebruiken voor uw volgende project.

Net als andere Node.js-frameworks biedt Nest.js een uitgebreide toolkit voor het bouwen van robuuste en schaalbare backend-services. Desalniettemin is het belangrijk om te begrijpen hoe u het maken, lezen, bijwerken en verwijderen implementeert (CRUD)-bewerkingen in Nest.js efficiënt uitvoeren: dit zijn de meest fundamentele bewerkingen in de ontwikkeling van API's.

Leer hoe u een Nest.js CRUD REST API bouwt met behulp van TypeORM en een PostgreSQL-database.

Aan de slag met Nest.js

Installeer om te beginnen het opdrachtregelprogramma Nest.js:

npm i -g @nestjs/cli

Maak vervolgens een nieuw project door het volgende uit te voeren:

nest nieuwe crud-app

De CLI-tool zal u vragen om een ​​pakketbeheerder te kiezen, kies de optie die u het meest verkiest. We zullen gebruiken npm, de Node-pakketbeheerder.

De CLI zal een standaard Nest.js-project ondersteunen met alle vereiste configuratiebestanden en initiële afhankelijkheden die nodig zijn om de applicatie uit te voeren.

instagram viewer

Navigeer ten slotte naar de projectdirectory en start de ontwikkelserver.

cd crud-app
npm-run start

U kunt de code van dit project vinden in de bijbehorende GitHub opslagplaats.

Maak een PostgreSQL-database

Deze zelfstudie maakt gebruik van een PostgreSQL-instantie in de cloud, maar u kunt in plaats daarvan een lokale PostgreSQL-database instellen. Jij kan Installeer PostgreSQL op Windows, op macOS, of op Linux.

Een cloud PostgreSQL-instantie instellen:

  1. Ga naar OlifantenSQL, meld u aan en log in op de overzichtspagina van uw account.
  2. Klik op de Nieuwe instantie maken knop in de linkerbovenhoek van de pagina om een ​​nieuwe instantie voor uw toepassing te maken.
  3. Vul de naam van uw instantie in, kies het gratis abonnement en selecteer ten slotte de regio om het installatieproces te voltooien.
  4. Ga na het maken van de database-instantie naar het instellingen pagina en kopieer het verstrekte database-URL.

Configureer de databaseverbinding

Maak in de hoofdmap van uw project een .env bestand en plak de databaseverbindings-URL als volgt:

DATABASE_URL=""

Installeer nu deze pakketten:

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

Ga vervolgens door en maak een databasemodule met behulp van de CLI-tool.

nest g module-database

Open de database/database.module.ts bestand en voeg de volgende databaseconfiguratiecode toe:

importeren { Module } van'@nestjs/common';
importeren { ConfigModule, ConfigService } van'@nestjs/config';
importeren { TypeOrmModule } van'@nestjs/typeorm';
importeren { Gebruiker } van'../users/models/user.entity';

@module({
invoer: [
TypeOrmModule.forRootAsync({
invoer: [ConfigModule],
injecteren: [ConfigService],

gebruikfabriek: asynchroon (configService: ConfigService) => ({
type: 'postgres',
url: configService.get('DATABASE_URL'),
entiteiten: [Gebruiker],
synchroniseren: WAAR
}),
}),
],
})

exporterenklas Databasemodule {}

Deze databasemodule zorgt voor de verbinding door de TypeORM-module te configureren met de vereiste verbindingsparameter, de database-URL.

Bovendien definieert het de gebruikersentiteit als onderdeel van de configuratie die de structuur en eigenschappen specificeert van de gegevens die zijn opgeslagen in de PostgreSQL-databasetabel.

In dit stadium zal uw code waarschijnlijk een fout genereren omdat u de gebruikersentiteit nog niet heeft gemaakt. Dat doe je in de volgende stappen.

Werk het bestand app.module.ts bij

Werk ten slotte de hoofdtoepassingsmodule bij om de configuratie voor de databasemodule op te nemen.

importeren { Module } van'@nestjs/common';
importeren { Configuratiemodule } van'@nestjs/config';
importeren { AppController } van'./app.controller';
importeren { AppService } van'./app.service';
importeren { DatabaseModule } van'./database/database.module';

@module({
invoer: [
ConfigModule.forRoot({
envFilePath: '.env',
}),
Databasemodule,
],

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

exporterenklas App-module {}

Definieer een gebruikersmodule

De gebruikersmodule dient als een gecentraliseerde component, verantwoordelijk voor het inkapselen en beheren van de logica die nodig is om de CRUD-functionaliteit van de API te implementeren.

Voer deze terminalopdracht uit om de gebruikersmodule van de API te maken.

gebruikers van de nest g-module

De CLI-tool werkt het app.module.ts bestand om de aangebrachte wijzigingen weer te geven, naast het maken van de gebruikersmodule. Dit zorgt ervoor dat de nieuw aangemaakte module, gebruikers, correct wordt geïntegreerd in de moduleconfiguratie van de applicatie.

Maak een gebruikersentiteit aan

TypeORM is een Object-Relational Mapping (ORM)-bibliotheek die database-interacties vereenvoudigt in toepassingen die TypeScript gebruiken door JavaScript-objecten toe te wijzen aan databasetabellen.

Door een gebruikersentiteit te maken met behulp van TypeORM, definieert u de structuur en eigenschappen van de gebruikersgegevens in de PostgreSQL-database.

Maak in de gebruikersdirectory een nieuw modellen/gebruiker.entiteit.ts en voeg de volgende code toe.

importeren { Entiteit, PrimaryGeneratedColumn, Kolom, } van"typevorm";

@Entiteit()
exporterenklas Gebruiker {
@PrimaryGeneratedColumn()
ID kaart: nummer;

@Kolom()
naam: snaar;

@Kolom()
e-mail: snaar;
}

De Gebruiker entiteit definieert de structuur van de gebruikersgegevens die in de database zijn opgeslagen. In dit geval is dat de ID kaart als de primaire sleutelkolom, en de naam En e-mailen kolommen en hun bijbehorende eigenschappen.

Maak de CRUD API-service

Maak nu de API-service die de logica voor de CRUD-bewerkingen beheert door de onderstaande opdracht uit te voeren:

gebruikers van de nest g-service

Open de gebruiker-auth.service.ts bestand en voeg deze code toe:

importeren { Injecteerbaar } van'@nestjs/common';
importeren { Injecteer opslagplaats } van'@nestjs/typeorm';
importeren { Opslagplaats } van'typevorm';
importeren {Gebruiker} van'./models/gebruiker.entiteit';

@Injecteerbaar()
exporterenklas GebruikersService {
constructeur(
@InjectRepository(Gebruiker)
privaat userRepository: Repository,
) {}

asynchroon vind alle(): Belofte {
opbrengstdit.userRepository.find();
}

asynchroon vindEen (id: nummer): Belofte {
opbrengstdit.userRepository.findOne({ waar: { id } });
}

asynchroon create (gebruiker: Gedeeltelijk): Belofte {
const nieuwe gebruiker = dit.userRepository.create (gebruiker);
opbrengstdit.userRepository.save (nieuwe gebruiker);
}

asynchroon updaten (id: nummer, gebruiker: Gedeeltelijk): Belofte {
wachtendit.userRepository.update (id, gebruiker);
opbrengstdit.userRepository.findOne({ waar: { id } });
}

asynchroonverwijderen(ID kaart: nummer): Belofte<leegte> {
wachtendit.userRepository.delete (id);
}
}

Deze klasse UsersService definieert verschillende API-methoden die zijn bedoeld voor het afhandelen van CRUD-bewerkingen. Deze methoden omvatten het ophalen van alle gebruikersgegevens, het vinden van een specifieke gebruiker met behulp van hun ID-nummer, het maken van een nieuwe gebruiker, het bijwerken van een bestaande gebruiker en een methode voor het verwijderen van de gegevens van een specifieke gebruiker in de database.

Definieer een controller voor de API

Maak een controller die de API-eindpunten beheert voor de gebruikersgerelateerde bewerkingen.

gebruikers van de nest g-controller

Voeg vervolgens onderstaande code toe aan het gebruikers.controller.ts bestand.

importeren {Controller, Get, Post, Body, Put, Param, Delete, NotFoundException, HttpCode} van'@nestjs/common';
importeren { GebruikersService } van'./gebruikers.service';
importeren { Gebruiker } van'./models/gebruiker.entiteit';

@Beheerder('api/gebruikers')
exporterenklas GebruikersController {
constructeur(privaat alleen-lezen gebruikersService: GebruikersService) {}

@Krijgen()
asynchroon vind alle(): Belofte {
opbrengstdit.usersService.findAll();
}

@Na()
@HttpCode(201)
asynchroon creëren(@Lichaam() gebruiker: gebruiker): Belofte {
const aangemaaktGebruiker = wachtendit.usersService.create (gebruiker);
opbrengst aangemaaktGebruiker;
}

@Neerzetten(':ID kaart')
asynchroon update (@Param('ID kaart') ID kaart: nummer, @Lichaam() gebruiker: gebruiker): Belofte<elk> {
wachtendit.usersService.update (id, gebruiker);
opbrengst { bericht: 'Gebruiker succesvol geüpdatet' };
}

@Verwijderen(':ID kaart')
asynchroonverwijderen(@Param('ID kaart') ID kaart: nummer): Belofte<elk> {
const gebruiker = wachtendit.usersService.findOne (id);

als (!gebruiker) {
gooiennieuw NietgevondenUitzondering('Gebruiker bestaat niet!');
}

wachtendit.usersService.delete (id);
opbrengst { bericht: 'Gebruiker succesvol verwijderd' };
}
}

De controller beheert API-eindpunten voor gebruikersbewerkingen. Het behandelt GET-verzoeken om alle gebruikers op te halen, POST-verzoeken om nieuwe gebruikers aan te maken, PUT-verzoeken om bestaande gebruikers bij te werken en DELETE-verzoeken om gebruikers te verwijderen.

Door gebruik te maken van de GebruikersService en interactie met de Gebruiker entiteit, biedt deze controller een complete API voor het beheer van gebruikersgerelateerde bewerkingen op de gegevens die zijn opgeslagen in de database.

Werk het bestand users.module.ts bij

Werk ten slotte de gebruikers.module.ts bestand zoals hieronder weergegeven om ervoor te zorgen dat u de Gebruikersentiteit en de TypeORM-module, die de verbinding met de database tot stand brengt.

importeren { Module } van'@nestjs/common';
importeren { GebruikersController } van'./gebruikers.controller';
importeren { GebruikersService } van'./gebruikers.service';
importeren { TypeOrmModule } van'@nestjs/typeorm';
importeren { Gebruiker } van'./models/gebruiker.entiteit';

@module({
invoer: [TypeOrmModule.forFeature([Gebruiker])],
controllers: [UsersController],
providers: [Gebruikersservice]
})

exporterenklas Gebruikersmodule {}

Ga ten slotte door en start de ontwikkelingsserver om de CRUD-bewerkingen te testen met Postman.

npm-run start

De server start op poort 3000 en u kunt er API-verzoeken naar sturen op http://localhost: 3000/api/gebruikers.

Backend-applicaties bouwen met Nest.js

Of je nu een eenvoudige REST API of een complexe web-app ontwikkelt, Nest.js biedt een uitgebreide set functies en mogelijkheden om een ​​betrouwbaar en robuust backend-systeem te bouwen.

Nest.js biedt een meer gestructureerde benadering van projectontwikkeling dan Express.js. Dit zorgt ervoor dat u vol vertrouwen complexe applicaties kunt bouwen, schalen en onderhouden, dankzij het georganiseerde en modulaire ontwerppatroon.