Følg med i denne vejledning for at lære om nogle spændende, komplementære teknologier, du kan bruge til dit næste projekt.

Som andre Node.js-frameworks tilbyder Nest.js et omfattende værktøjssæt til at bygge robuste og skalerbare backend-tjenester. Ikke desto mindre er det vigtigt at forstå, hvordan man implementerer oprettelse, læsning, opdatering og sletning (CRUD) operationer i Nest.js effektivt – disse er de mest fundamentale operationer i udviklingen af API'er.

Lær, hvordan du bygger en Nest.js CRUD REST API ved hjælp af TypeORM og en PostgreSQL-database.

Kom godt i gang med Nest.js

For at komme i gang skal du installere kommandolinjeværktøjet Nest.js:

npm i -g @nestjs/cli

Opret derefter et nyt projekt ved at køre:

nest new crud-app

CLI-værktøjet vil bede dig om at vælge en pakkehåndtering, vælg den mulighed, du finder mest at foretrække. Vi bruger npm, Node-pakkeadministratoren.

CLI'en vil stilladsere et grundlæggende Nest.js-projekt med alle de nødvendige konfigurationsfiler og indledende afhængigheder, der kræves for at køre applikationen.

Til sidst skal du navigere til projektbiblioteket og starte udviklingsserveren.

cd crud-app
npm løb start

Du kan finde dette projekts kode i dens GitHub depot.

Opret en PostgreSQL-database

Denne tutorial bruger en cloud PostgreSQL-instans, men du kan konfigurere en lokal PostgreSQL-database i stedet for. Du kan installere PostgreSQL på Windows, på macOS, eller på Linux.

Sådan konfigurerer du en Cloud PostgreSQL-instans:

  1. Gå over til ElephantSQL, tilmeld dig og log ind på din kontos oversigtsside.
  2. Klik på Opret ny instans knappen øverst til venstre på siden for at oprette en ny forekomst til din applikation.
  3. Udfyld navnet på din forekomst, vælg den gratis plan, og vælg til sidst regionen for at fuldføre opsætningsprocessen.
  4. Når du har oprettet databaseforekomsten, skal du gå til indstillinger side, og kopier den angivne database URL.

Konfigurer databaseforbindelsen

I dit projekts rodmappe skal du oprette en .env fil og indsæt databaseforbindelsens URL som følger:

DATABASE_URL=""

Installer nu disse pakker:

npm installer pg typeorm @nestjs/typeorm @nestjs/config

Gå derefter videre og opret et databasemodul ved hjælp af CLI-værktøjet.

nest g modul database

Åbn database/database.modul.ts fil og tilføj følgende databasekonfigurationskode:

importere { Modul } fra'@nestjs/common';
importere { ConfigModule, ConfigService } fra'@nestjs/config';
importere { TypeOrmModule } fra'@nestjs/typeorm';
importere { Bruger } fra'../users/models/user.entity';

@Modul({
import: [
TypeOrmModule.forRootAsync({
importerer: [ConfigModule],
inject: [ConfigService],

useFactory: asynkron (configService: ConfigService) => ({
type: 'postgres',
url: configService.get('DATABASE_URL'),
enheder: [Bruger],
synkronisere: rigtigt
}),
}),
],
})

eksportklasse Databasemodul {}

Dette databasemodul håndterer forbindelsen ved at konfigurere TypeORM-modulet med den nødvendige forbindelsesparameter, databasens URL.

Derudover definerer den brugerenheden som en del af den konfiguration, der specificerer strukturen og egenskaberne for de data, der er gemt i PostgreSQL-databasetabellen.

På dette stadium vil din kode sandsynligvis give en fejl, fordi du ikke har oprettet brugerenheden endnu. Det gør du i de følgende trin.

Opdater app.module.ts-filen

Til sidst skal du opdatere hovedapplikationsmodulet for at inkludere konfigurationen for databasemodulet.

importere { Modul } fra'@nestjs/common';
importere { ConfigModule } fra'@nestjs/config';
importere { AppController } fra'./app.controller';
importere { AppService } fra'./app.service';
importere { DatabaseModule } fra'./database/database.modul';

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

controllere: [AppController],
udbydere: [AppService],
})

eksportklasse AppModule {}

Definer et brugermodul

Brugermodulet fungerer som en centraliseret komponent, ansvarlig for at indkapsle og administrere den logik, der kræves for at implementere API'ens CRUD-funktionalitet.

Kør denne terminalkommando for at oprette API'ens brugermodul.

nest g-modulbrugere

CLI-værktøjet opdaterer automatisk app.modul.ts fil for at afspejle de foretagne ændringer, ud over at oprette brugermodulet. Dette sikrer, at det nyoprettede modul, brugere, er korrekt integreret i applikationens modulkonfiguration.

Opret en brugerenhed

TypeORM er et ORM-bibliotek (Object-Relational Mapping), der forenkler databaseinteraktioner i applikationer, der bruger TypeScript ved at kortlægge JavaScript-objekter til databasetabeller.

Ved at oprette en brugerentitet ved hjælp af TypeORM definerer du strukturen og egenskaberne for brugerdataene i PostgreSQL-databasen.

Opret en ny i brugerbiblioteket modeller/bruger.enhed.ts og tilføje følgende kode.

importere { Entity, PrimaryGeneratedColumn, Column, } fra"typeorm";

@Enhed()
eksportklasse Bruger {
@PrimaryGeneratedColumn()
id: nummer;

@Kolonne()
navn: snor;

@Kolonne()
e-mail: snor;
}

Det Bruger enhed definerer strukturen af ​​de brugerdata, der er gemt i databasen. I dette tilfælde er det id som den primære nøglekolonne, og navn og e-mail kolonner og deres tilsvarende egenskaber.

Opret CRUD API-tjenesten

Opret nu API-tjenesten, der administrerer logikken for CRUD-operationerne ved at køre kommandoen nedenfor:

nest g service brugere

Åbn user-auth.service.ts fil og tilføj denne kode:

importere { Injicerbar } fra'@nestjs/common';
importere { InjectRepository } fra'@nestjs/typeorm';
importere { Repository } fra'typeorm';
importere {Bruger} fra'./models/user.entity';

@Injicerbar()
eksportklasse UsersService {
konstruktør(
@InjectRepository(Bruger)
privat userRepository: Repository,
) {}

asynkron findAll(): Løfte {
Vend tilbagedet her.userRepository.find();
}

asynkron findOne (id: nummer): Løfte {
Vend tilbagedet her.userRepository.findOne({ hvor: { id } });
}

asynkron oprette (bruger: Delvis): Løfte {
konst ny bruger = det her.userRepository.create (bruger);
Vend tilbagedet her.userRepository.save (nybruger);
}

asynkron opdatering (id: nummer, bruger: Delvis): Løfte {
ventedet her.userRepository.update (id, bruger);
Vend tilbagedet her.userRepository.findOne({ hvor: { id } });
}

asynkronslette(id: nummer): Løfte<ugyldig> {
ventedet her.userRepository.delete (id);
}
}

Denne UsersService-klasse definerer forskellige API-metoder dedikeret til at håndtere CRUD-operationer. Disse metoder omfatter at hente alle brugeres data, finde en bestemt bruger ved hjælp af deres ID-nummer, oprettelse en ny bruger, opdatering af en eksisterende bruger og en metode til at slette en specifik brugers data i databasen.

Definer en controller til API'en

Opret en controller, der skal administrere API-endepunkterne for de brugerrelaterede operationer.

nest g controller brugere

Tilføj derefter koden nedenfor til brugere.controller.ts fil.

importere { Controller, Get, Post, Body, Put, Param, Delete, NotFoundException, HttpCode } fra'@nestjs/common';
importere { UsersService } fra'./brugere.service';
importere { Bruger } fra'./models/user.entity';

@Kontroller('api/brugere')
eksportklasse UsersController {
konstruktør(privat readonly usersService: UsersService) {}

@Få()
asynkron findAll(): Løfte {
Vend tilbagedet her.usersService.findAll();
}

@Stolpe()
@HttpCode(201)
asynkron skab(@Legeme() bruger: Bruger): Løfte {
konst oprettetBruger = ventedet her.usersService.create (bruger);
Vend tilbage oprettet Bruger;
}

@Sætte(':id')
asynkron opdatering (@Param('id') id: nummer, @Legeme() bruger: Bruger): Løfte<nogen> {
ventedet her.usersService.update (id, bruger);
Vend tilbage { besked: 'Brugeren blev opdateret' };
}

@Slet(':id')
asynkronslette(@Param('id') id: nummer): Løfte<nogen> {
konst bruger = ventedet her.usersService.findOne (id);

hvis (!bruger) {
kasteny NotFoundException('Bruger eksisterer ikke!');
}

ventedet her.usersService.delete (id);
Vend tilbage { besked: 'Brugeren blev slettet' };
}
}

Controlleren administrerer API-endepunkter for brugeroperationer. Den håndterer GET-anmodninger om at hente alle brugere, POST-anmodninger om at oprette nye brugere, PUT-anmodninger om at opdatere eksisterende brugere og SLET-anmodninger om at slette brugere.

Ved at bruge Brugerservice og interagere med Bruger enhed, leverer denne controller en komplet API til styring af brugerrelaterede operationer på de data, der er gemt i databasen.

Opdater users.module.ts-filen

Til sidst skal du opdatere brugere.modul.ts fil som vist nedenfor for at sikre, at du inkorporerer Brugerenhed og TypeORM-modulet, som etablerer forbindelsen til databasen.

importere { Modul } fra'@nestjs/common';
importere { UsersController } fra'./brugere.controller';
importere { UsersService } fra'./brugere.service';
importere { TypeOrmModule } fra'@nestjs/typeorm';
importere { Bruger } fra'./models/user.entity';

@Modul({
importerer: [TypeOrmModule.forFeature([User])],
controllere: [UsersController],
udbydere: [UsersService]
})

eksportklasse UsersModule {}

Til sidst, gå videre og skru udviklingsserveren op for at teste CRUD-operationerne ved hjælp af Postman.

npm løb start

Serveren starter på port 3000, og du kan sende API-anmodninger til den på http://localhost: 3000/api/brugere.

Opbygning af backend-applikationer med Nest.js

Uanset om du udvikler en simpel REST API eller en kompleks webapp, tilbyder Nest.js et omfattende sæt funktioner og muligheder til at konstruere et pålideligt og robust backend-system.

Nest.js tilbyder en mere struktureret tilgang til projektudvikling end Express.js gør. Dette sikrer, at du trygt kan bygge, skalere og vedligeholde komplekse applikationer takket være dets organiserede og modulære designmønster.