خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

نحوه استفاده از پایگاه های داده SQL در یک برنامه NestJS با TypeORM

یک نگاشت شیء-رابطه ای (ORM) کتابخانه ای است که تکنیک نگاشت شی-رابطه ای را پیاده سازی می کند. این به شما امکان می دهد پرس و جوهای پایگاه داده SQL را با استفاده از پارادایم شی گرا زبان دلخواه خود بنویسید.

یک نگاشت شیء-رابطه ای (ORM) کتابخانه ای است که تکنیک نگاشت شی-رابطه ای را پیاده سازی می کند. این به شما امکان می دهد پرس و جوهای پایگاه داده SQL را با استفاده از پارادایم شی گرا زبان دلخواه خود بنویسید.

TypeORM یک ORM TypeScript است که ارتباط با پایگاه های داده مختلف را بسیار آسان می کند. با پایگاه‌های داده SQL کار می‌کند، اما همچنین به خوبی با پایگاه‌های داده NoSQL مانند MongoDB ارتباط برقرار می‌کند.

NestJS پشتیبانی سطح بالایی از TypeORM خارج از جعبه فراهم می کند. بسته اختصاصی TypeORM ادغام را نسبتاً آسان می کند.

مرحله 1: نصب Dependencies

قبل از استفاده از TypeORM در یک برنامه NestJS، باید آن را با بسته اصلی NestJS و پایگاه داده SQL ترجیحی خود نصب کنید. SQLite یک گزینه ساده و بدون نصب است.

دستور زیر را برای نصب TypeORM و بسته اصلی NestJS آن با استفاده از مدیریت بسته npm اجرا کنید:

npm install @nestjs/typeorm typeorm

برای نصب SQLite دستور زیر را اجرا کنید:

npm install sqlite3

مرحله 2: ایجاد یک موجودیت

یک موجودیت مجموعه ای از فیلدها است که داده های ذخیره شده در پایگاه داده را تعریف می کند. TypeORM از فایل entity برای ایجاد جدول در پایگاه داده شما استفاده می کند.

برای ایجاد یک موجودیت مراحل زیر را دنبال کنید:

  1. یک فایل در ماژول برنامه خود ایجاد کنید و نام آن را مطابق با قرارداد نامگذاری NestJS (.entity.ts) بگذارید.
  2. در فایل entity، دکوراتورهای Entity، Column و PrimaryGeneratedColumn را از typeorm وارد کنید.
  3. در فایل entity خود، یک کلاس ایجاد و صادر کنید.
  4. کلاس را با مقادیری که می خواهید در پایگاه داده خود پر کنید، مانند شناسه، نام و غیره.
  5. کلاس entity خود را با Entity decorator حاشیه نویسی کنید. این باعث می شود کلاس شما برای TypeORM به عنوان یک موجودیت قابل تشخیص باشد.
  6. ویژگی شناسه خود را با تزئین کننده PrimaryGeneratedColumn حاشیه نویسی کنید. این به TypeORM می‌گوید که شناسه را به‌عنوان کلید اصلی علامت‌گذاری کند و آن را به‌طور خودکار افزایش دهد.
  7. ویژگی های باقی مانده را با تزئین ستون حاشیه نویسی کنید. این آنها را به عنوان ستون در پایگاه داده شما اضافه می کند.

به عنوان مثال:

// src/test/test.entity.ts
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
 
@Entity()
export class Test {
  @PrimaryGeneratedColumn()
  id: number;
 
  @Column()
  property_1: string;
 
  @Column()
  property_2: string;
 
  @Column()
  property_3: string;
}

فایل موجود در بالا این جدول را در پایگاه داده شما ایجاد می کند:

تست کنید

شناسه

int (11)

کلید اولیه AUTO_INCREMENT

دارایی_1

varchar(255)

دارایی_2

varchar(255)

دارایی_3

varchar(255)

اسناد TypeORM جزئیات بیشتری را پوشش می دهد.

مرحله 3: اتصال برنامه خود به یک پایگاه داده

اکنون که نهاد شما راه اندازی شده است، باید برنامه خود را به یک پایگاه داده متصل کنید. این مثال از SQLite استفاده می کند.

برای اتصال برنامه خود به پایگاه داده مراحل زیر را دنبال کنید:

  1. در ماژول ریشه برنامه های خود (معمولاً فایل app.module.ts)، TypeOrmModule را از @nestjs/typeorm وارد کنید.
  2. در همان فایل، تمام موجودیت های خود را وارد کنید.
  3. در آرایه imports، متد forRoot را در TypeOrmModule فراخوانی کنید. روش forRoot اتصال پایگاه داده را از طریق تمام ماژول های برنامه شما به اشتراک می گذارد.
  4. یک شی خالی به عنوان آرگومان به متد forRoot ارسال کنید. این شیء پیکربندی TypeORM خواهد بود.
  5. یک خاصیت، نوع، به شی پیکربندی اضافه کنید و آن را روی “sqlite” قرار دهید. ویژگی type نشان دهنده نام پایگاه داده ای است که از آن استفاده می کنید.
  6. یک ویژگی دیگر، پایگاه داده، به شی پیکربندی اضافه کنید و آن را روی “test.db” قرار دهید. ویژگی پایگاه داده نشان دهنده نام مورد نظر شما برای پایگاه داده شما است.
  7. یک ویژگی دیگر، نهادها، به شیء پیکربندی اضافه کنید و آن را روی یک آرایه خالی تنظیم کنید. آرایه خالی را با موجوداتی که قبلا وارد کرده اید پر کنید.
  8. یک ویژگی دیگر اضافه کنید، همگام سازی کنید و آن را درست تنظیم کنید. این ویژگی موجودیت های شما را با پایگاه داده شما همگام می کند و هر بار که کد را اجرا می کنید آن را به روز می کند. در توسعه فقط باید این ویژگی را روی true تنظیم کنید. در طول تولید، باید آن را روی false تنظیم کنید تا از دست رفتن داده ها جلوگیری شود.

// src/app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Test } from './test/test.entity';
import { Entity2 } from './entity/entity.entity';
import { TestModule } from './test/test.module';
 
@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'sqlite',
      database: 'test.db',
      entities: [Test, Entity2],
      synchronize: true, //development only
    }),
    TestModule,
  ],
  controllers: [],
  providers: [],
})

export class AppModule {}

مرحله 4: ایجاد یک مخزن

مخزن لایه دسترسی یک موجودیت است که برای ایجاد پرس و جوها (درج، حذف، ذخیره، یافتن و غیره) در جدول ایجاد شده توسط موجودیت در پایگاه داده استفاده می شود. TypeORM از الگوی طراحی مخزن پشتیبانی می کند، بنابراین، هر موجودیت مخزن خود را دارد.

وقتی مراحل زیر را دنبال کنید TypeORM به طور خودکار یک مخزن برای موجودیت شما ایجاد می کند:

  1. در فایل ماژول موجودیت خود، TypeOrmModule را از @nestjs/typeorm وارد کنید و موجودیت خود را وارد کنید.
  2. یک آرایه وارداتی در دکوراتور @Module ایجاد کنید.
  3. در آرایه imports، متد forFeature را در TypeOrmModule فراخوانی کنید.
  4. یک آرایه را به عنوان آرگومان در خود ارسال کنید و آرایه را با موجودیت خود پر کنید.

// src/test/test.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { TestController } from './test.controller';
import { TestService } from './test.service';
import { Test } from './test.entity';
 
@Module({
  imports: [TypeOrmModule.forFeature([Test])],
  providers: [TestService],
  controllers: [TestController],
})

مرحله 5: با استفاده از Dependency Injection، مخزن خود را به سرویس آن تزریق کنید

تزریق وابستگی یک تکنیک مهندسی نرم افزار است که شکلی از وارونگی اصل کنترل است. بار مدیریت وابستگی را از کد مشتری به کتابخانه یا سرویسی که به آن وابسته است منتقل می کند.

مراحل زیر را برای تزریق مخزن خود به یک سرویس دنبال کنید:

  1. در فایل سرویس خود، Repository را از typeorm و Decorator InjectRepository را از @nestjs/typeorm وارد کنید. همچنین موجودی را که می‌خواهید مخزن آن را تزریق کنید، وارد کنید.
  2. در کلاس سرویس خود، یک سازنده ایجاد کنید.
  3. یک متغیر خصوصی به نام repo را به عنوان پارامتر در سازنده برای مقداردهی اولیه آن اعلام کنید.
  4. یک نوع Repository را با یک نوع عمومی از موجودیت خود به repo اختصاص دهید.
  5. Repo را با دکوراتور InjectRepository حاشیه نویسی کنید و موجودیت خود را به عنوان آرگومان ارسال کنید.

// test.service.ts

import { Injectable } from '@nestjs/common';
import { Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { Test } from './test.entity';
 
@Injectable()
export class TestService {
  constructor(
    @InjectRepository(Test)
    private repo: Repository<Test>,
  ) {}
}

اکنون که راه اندازی شما کامل شده است، می توانید برای بازیابی یا اصلاح داده ها، پرس و جوهای SQL را روی آن ایجاد کنید.

ایجاد پرس و جوهای SQL با TypeORM

می‌توانید با فراخوانی متدهای مخزن TypeORM روی متغیر repo در کلاس سرویس خود، هر پرس‌وجو ساده SQL را انجام دهید. همچنین می توانید پرس و جوهای پیچیده SQL را با استفاده از سازنده پرس و جو TypeORM ایجاد کنید.

مطلب مرتبط:   راهنمای مبتدیان برای API های RESTful در Node.js