Πώς να δημιουργήσετε ένα Nest.js CRUD REST API χρησιμοποιώντας TypeORM και PostgreSQL

Όπως και άλλα πλαίσια Node.js, το Nest.js παρέχει μια ολοκληρωμένη εργαλειοθήκη για τη δημιουργία ισχυρών και επεκτάσιμων υπηρεσιών υποστήριξης. Ωστόσο, είναι σημαντικό να κατανοήσουμε πώς να εφαρμόσουμε αποτελεσματικά τις λειτουργίες δημιουργίας, ανάγνωσης, ενημέρωσης και διαγραφής (CRUD) στο Nest.js—αυτές είναι οι πιο θεμελιώδεις λειτουργίες στην ανάπτυξη API.

Μάθετε πώς να δημιουργείτε ένα Nest.js CRUD REST API χρησιμοποιώντας TypeORM και μια βάση δεδομένων PostgreSQL.

Ξεκινώντας με το Nest.js

Για να ξεκινήσετε, εγκαταστήστε το εργαλείο γραμμής εντολών Nest.js:

 npm i -g @nestjs/cli 

Στη συνέχεια, δημιουργήστε ένα νέο έργο εκτελώντας:

 nest new crud-app 

Το εργαλείο CLI θα σας ζητήσει να επιλέξετε έναν διαχειριστή πακέτων, επιλέξτε την επιλογή που θεωρείτε πιο προτιμότερη. Θα χρησιμοποιήσουμε το npm, τον διαχειριστή πακέτων Node.

Το CLI θα δημιουργήσει ένα βασικό έργο Nest.js με όλα τα απαιτούμενα αρχεία διαμόρφωσης και τις αρχικές εξαρτήσεις που απαιτούνται για την εκτέλεση της εφαρμογής.

Τέλος, μεταβείτε στον κατάλογο του έργου και ξεκινήστε τον διακομιστή ανάπτυξης.

 cd crud-app
npm run start

Μπορείτε να βρείτε τον κωδικό αυτού του έργου σε αυτό GitHub αποθήκη.

Δημιουργήστε μια βάση δεδομένων PostgreSQL

Αυτό το σεμινάριο χρησιμοποιεί μια παρουσία του cloud PostgreSQL, αλλά μπορείτε να ρυθμίσετε μια τοπική βάση δεδομένων PostgreSQL. Μπορείτε να εγκαταστήσετε το PostgreSQL σε Windows, σε macOS ή σε Linux.

Για να ρυθμίσετε μια παρουσία του cloud PostgreSQL:

  • Κατευθυνθείτε προς ElephantSQLεγγραφείτε και συνδεθείτε στη σελίδα επισκόπησης του λογαριασμού σας.
  • Κάντε κλικ στο κουμπί Δημιουργία νέας παρουσίας στην επάνω αριστερή ενότητα της σελίδας για να δημιουργήσετε μια νέα παρουσία για την εφαρμογή σας.
  • Συμπληρώστε το όνομα της παρουσίας σας, επιλέξτε το δωρεάν πρόγραμμα και, τέλος, επιλέξτε την περιοχή για να ολοκληρώσετε τη διαδικασία εγκατάστασης.
  • Αφού δημιουργήσετε την παρουσία της βάσης δεδομένων, μεταβείτε στη σελίδα ρυθμίσεων και αντιγράψτε το παρεχόμενο URL της βάσης δεδομένων.
  •   Το CoreWeave εξασφαλίζει άλλα $200 εκατομμύρια, το Lightmatter συγκεντρώνει $154 εκατομμύρια

    Διαμορφώστε τη σύνδεση βάσης δεδομένων

    Στον ριζικό κατάλογο του έργου σας, δημιουργήστε ένα αρχείο .env και επικολλήστε τη διεύθυνση URL σύνδεσης της βάσης δεδομένων ως εξής:

     DATABASE_URL="<your connection url here>" 

    Τώρα εγκαταστήστε αυτά τα πακέτα:

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

    Στη συνέχεια, προχωρήστε και δημιουργήστε μια μονάδα βάσης δεδομένων χρησιμοποιώντας το εργαλείο CLI.

     nest g module database 

    Ανοίξτε το αρχείο database/database.module.ts και προσθέστε τον ακόλουθο κώδικα διαμόρφωσης βάσης δεδομένων:

     import { Module } from '@nestjs/common';
    import { ConfigModule, ConfigService } from '@nestjs/config';
    import { TypeOrmModule } from '@nestjs/typeorm';
    import { User } from '../users/models/user.entity';

    @Module({
      imports: [
        TypeOrmModule.forRootAsync({
          imports: [ConfigModule],
          inject: [ConfigService],

          useFactory: async (configService: ConfigService) => ({
            type: 'postgres',
            url: configService.get('DATABASE_URL'),
            entities: [User],
            synchronize: true
          }),
        }),
      ],
    })

    export class DatabaseModule {}

    Αυτή η λειτουργική μονάδα βάσης δεδομένων χειρίζεται τη σύνδεση διαμορφώνοντας τη μονάδα TypeORM με την απαιτούμενη παράμετρο σύνδεσης, τη διεύθυνση URL της βάσης δεδομένων.

    Επιπλέον, ορίζει την οντότητα χρήστη ως μέρος της διαμόρφωσης που καθορίζει τη δομή και τις ιδιότητες των δεδομένων που είναι αποθηκευμένα στον πίνακα βάσης δεδομένων PostgreSQL.

    Σε αυτό το στάδιο, ο κώδικάς σας πιθανότατα θα προκαλέσει σφάλμα επειδή δεν έχετε δημιουργήσει ακόμα την οντότητα χρηστών. Θα το κάνετε στα παρακάτω βήματα.

    Ενημερώστε το αρχείο app.module.ts

    Τέλος, ενημερώστε την κύρια λειτουργική μονάδα εφαρμογής ώστε να περιλαμβάνει τη διαμόρφωση για τη μονάδα βάσης δεδομένων.

     import { Module } from '@nestjs/common';
    import { ConfigModule } from '@nestjs/config';
    import { AppController } from './app.controller';
    import { AppService } from './app.service';
    import { DatabaseModule } from './database/database.module';

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

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

    export class AppModule {}

    Καθορίστε μια ενότητα χρηστών

    Η ενότητα χρηστών χρησιμεύει ως ένα κεντρικό στοιχείο, υπεύθυνο για την ενθυλάκωση και τη διαχείριση της λογικής που απαιτείται για την υλοποίηση της λειτουργικότητας CRUD του API.

    Εκτελέστε αυτήν την εντολή τερματικού για να δημιουργήσετε τη λειτουργική μονάδα χρηστών του API.

     nest g module users 

    Το εργαλείο CLI ενημερώνει αυτόματα το αρχείο app.module.ts για να αντικατοπτρίζει τις αλλαγές που έγιναν, εκτός από τη δημιουργία της λειτουργικής μονάδας χρήστη. Αυτό διασφαλίζει ότι η μονάδα που δημιουργήθηκε πρόσφατα, χρήστες, είναι σωστά ενσωματωμένη στη διαμόρφωση της μονάδας της εφαρμογής.

      Πώς να προσθέσετε βιογραφικό στο LinkedIn για να αυξήσετε το προφίλ σας [5 Resume Templates]

    Δημιουργήστε μια οντότητα χρήστη

    Το TypeORM είναι μια βιβλιοθήκη Object-Relational Mapping (ORM) που απλοποιεί τις αλληλεπιδράσεις βάσεων δεδομένων σε εφαρμογές που χρησιμοποιούν TypeScript αντιστοιχίζοντας αντικείμενα JavaScript σε πίνακες βάσεων δεδομένων.

    Δημιουργώντας μια οντότητα χρήστη χρησιμοποιώντας το TypeORM, ορίζετε τη δομή και τις ιδιότητες των δεδομένων χρήστη στη βάση δεδομένων PostgreSQL.

    Στον κατάλογο χρηστών, δημιουργήστε ένα νέο models/user.entity.ts και προσθέστε τον ακόλουθο κώδικα.

     import { Entity, PrimaryGeneratedColumn, Column, } from "typeorm";

    @Entity()
    export class User {
        @PrimaryGeneratedColumn()
        id: number;

        @Column()
        name: string;

        @Column()
        email: string;
    }

    Η οντότητα χρήστη ορίζει τη δομή των δεδομένων χρήστη που είναι αποθηκευμένα στη βάση δεδομένων. Σε αυτήν την περίπτωση, αυτό είναι το αναγνωριστικό ως στήλη πρωτεύοντος κλειδιού και οι στήλες ονόματος και email και οι αντίστοιχες ιδιότητές τους.

    Δημιουργήστε την υπηρεσία CRUD API

    Τώρα, δημιουργήστε την υπηρεσία API που θα διαχειρίζεται τη λογική για τις λειτουργίες CRUD εκτελώντας την παρακάτω εντολή:

     nest g service users 

    Ανοίξτε το αρχείο user-auth.service.ts και προσθέστε αυτόν τον κώδικα:

     import { Injectable } from '@nestjs/common';
    import { InjectRepository } from '@nestjs/typeorm';
    import { Repository } from 'typeorm';
    import {User} from './models/user.entity';

    @Injectable()
    export class UsersService {
      constructor(
        @InjectRepository(User)
        private userRepository: Repository<User>,
      ) {}

      async findAll(): Promise<User[]> {
        return this.userRepository.find();
      }

      async findOne(id: number): Promise<User> {
        return this.userRepository.findOne({ where: { id } });
      }

      async create(user: Partial<User>): Promise<User> {
        const newuser = this.userRepository.create(user);
        return this.userRepository.save(newuser);
      }

      async update(id: number, user: Partial<User>): Promise<User> {
        await this.userRepository.update(id, user);
        return this.userRepository.findOne({ where: { id } });
      }

      async delete(id: number): Promise<void> {
        await this.userRepository.delete(id);
      }
    }

    Αυτή η κλάση UsersService ορίζει διάφορες μεθόδους API αφιερωμένες στον χειρισμό λειτουργιών CRUD. Αυτές οι μέθοδοι περιλαμβάνουν την ανάκτηση όλων των δεδομένων των χρηστών, την εύρεση ενός συγκεκριμένου χρήστη χρησιμοποιώντας τον αριθμό αναγνωριστικού του, τη δημιουργία νέου χρήστη, την ενημέρωση ενός υπάρχοντος χρήστη και μια μέθοδο για τη διαγραφή των δεδομένων ενός συγκεκριμένου χρήστη στη βάση δεδομένων.

    Ορίστε έναν ελεγκτή για το API

    Δημιουργήστε έναν ελεγκτή που θα διαχειρίζεται τα τελικά σημεία API για τις λειτουργίες που σχετίζονται με τον χρήστη.

     nest g controller users 

    Στη συνέχεια, προσθέστε τον παρακάτω κώδικα στο αρχείο users.controller.ts.

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

    @Controller('api/users')
    export class UsersController {
      constructor(private readonly usersService: UsersService) {}

      @Get()
      async findAll(): Promise<User[]> {
        return this.usersService.findAll();
      }

      @Post()
      @HttpCode(201)
      async create(@Body() user: User): Promise<User> {
        const createdUser = await this.usersService.create(user);
        return createdUser;
      }

      @Put(':id')
      async update (@Param('id') id: number, @Body() user: User): Promise<any> {
        await this.usersService.update(id, user);
        return { message: 'User updated successfully' };
      }

      @Delete(':id')
      async delete(@Param('id') id: number): Promise<any> {
        const user = await this.usersService.findOne(id);

        if (!user) {
          throw new NotFoundException('User does not exist!');
        }

        await this.usersService.delete(id);
        return { message: 'User deleted successfully' };
      }
    }

    Ο ελεγκτής διαχειρίζεται τα τελικά σημεία API για λειτουργίες χρήστη. Διαχειρίζεται αιτήματα GET για ανάκτηση όλων των χρηστών, αιτήματα POST για δημιουργία νέων χρηστών, αιτήματα PUT για ενημέρωση υπαρχόντων χρηστών και αιτήματα DELETE για διαγραφή χρηστών.

      Πώς να ενεργοποιήσετε τον ασφαλή φάκελο σε τηλέφωνα Samsung

    Χρησιμοποιώντας το UsersService και αλληλεπιδρώντας με την οντότητα χρήστη, αυτός ο ελεγκτής παρέχει ένα πλήρες API για τη διαχείριση λειτουργιών που σχετίζονται με τον χρήστη στα δεδομένα που είναι αποθηκευμένα στη βάση δεδομένων.

    Ενημερώστε το αρχείο users.module.ts

    Τέλος, ενημερώστε το αρχείο users.module.ts όπως φαίνεται παρακάτω για να βεβαιωθείτε ότι ενσωματώνετε την οντότητα χρήστη και τη λειτουργική μονάδα TypeORM, η οποία δημιουργεί τη σύνδεση με τη βάση δεδομένων.

     import { Module } from '@nestjs/common';
    import { UsersController } from './users.controller';
    import { UsersService } from './users.service';
    import { TypeOrmModule } from '@nestjs/typeorm';
    import { User } from './models/user.entity';

    @Module({
      imports: [TypeOrmModule.forFeature([User])],
      controllers: [UsersController],
      providers: [UsersService]
    })

    export class UsersModule {}

    Τέλος, προχωρήστε και γυρίστε τον διακομιστή ανάπτυξης για να δοκιμάσετε τις λειτουργίες CRUD χρησιμοποιώντας το Postman.

     npm run start 

    Ο διακομιστής θα ξεκινήσει στη θύρα 3000 και μπορείτε να στείλετε αιτήματα API σε αυτόν στη διεύθυνση http://localhost:3000/api/users.

    Δημιουργία εφαρμογών Backend με το Nest.js

    Είτε αναπτύσσετε ένα απλό REST API είτε μια πολύπλοκη εφαρμογή Ιστού, το Nest.js προσφέρει ένα ολοκληρωμένο σύνολο λειτουργιών και δυνατοτήτων για τη δημιουργία ενός αξιόπιστου και ισχυρού συστήματος υποστήριξης.

    Το Nest.js προσφέρει μια πιο δομημένη προσέγγιση για την ανάπτυξη έργου από ό,τι το Express.js. Αυτό διασφαλίζει ότι μπορείτε να δημιουργήσετε, να κλιμακώσετε και να διατηρήσετε με σιγουριά σύνθετες εφαρμογές, χάρη στο οργανωμένο και αρθρωτό μοτίβο σχεδίασής του.