Ինչպես օգտագործել SQL տվյալների բազաները NestJS հավելվածում TypeORM-ով
Ինչու՞ չավելացնել ձեր տվյալների բազայի խաղը TypeORM-ի լիարժեք հնարավորություններով NestJS փաթեթով:
Object-Relational Mapper-ը (ORM) գրադարան է, որն իրականացնում է Օբյեկտ-հարաբերական քարտեզագրման տեխնիկան: Սա թույլ է տալիս գրել SQL տվյալների բազայի հարցումներ՝ օգտագործելով ձեր նախընտրած լեզվի օբյեկտ-կողմնորոշված պարադիգմը:
TypeORM-ը TypeScript ORM է, որը շատ հեշտ է դարձնում ինտերֆեյսը տարբեր տվյալների բազաների հետ: Այն աշխատում է SQL տվյալների շտեմարանների հետ, բայց նաև հիանալի կերպով համագործակցում է NoSQL տվյալների բազաների հետ, ինչպիսին է MongoDB-ն:
NestJS-ը տրամադրում է բարձր մակարդակի աջակցություն TypeORM-ին առանց տուփի: Հատուկ TypeORM փաթեթը համեմատաբար հեշտացնում է ինտեգրումը:
Քայլ 1. Կախվածությունների տեղադրում
Նախքան TypeORM-ը NestJS հավելվածում օգտագործելը, դուք պետք է այն տեղադրեք իր բնիկ NestJS փաթեթով և ձեր նախընտրած SQL տվյալների բազայով: SQLite-ը պարզ, առանց տեղադրման տարբերակ է:
Գործարկեք հետևյալ հրամանը՝ TypeORM-ը և նրա բնիկ NestJS փաթեթը տեղադրելու համար՝ օգտագործելով npm փաթեթների կառավարիչը.
npm install @nestjs/typeorm typeorm
SQLite-ը տեղադրելու համար գործարկեք հետևյալ հրամանը.
npm install sqlite3
Քայլ 2. Ստեղծել էություն
Սուբյեկտը դաշտերի հավաքածու է, որը սահմանում է տվյալների բազայում պահվող տվյալները: TypeORM-ն օգտագործում է էության ֆայլը՝ ձեր տվյալների բազայում աղյուսակ ստեղծելու համար:
Կազմակերպություն ստեղծելու համար հետևեք հետևյալ քայլերին.
- Ստեղծեք ֆայլ ձեր հավելվածի մոդուլում և անվանեք այն՝ համաձայն NestJS անվանման կոնվենցիայի (
.entity.ts ): - Ձեր իրավաբանական ֆայլում ներմուծեք Entity, Column և PrimaryGeneratedColumn դեկորատորները typeorm-ից:
- Ձեր էության ֆայլում ստեղծեք և արտահանեք դաս:
- Լրացրեք դասը ձեր տվյալների բազայում ձեր ուզած արժեքներով, օրինակ՝ id, անուն և այլն:
- Նշեք ձեր օբյեկտի դասը Entity decorator-ով: Սա ձեր դասը ճանաչելի է դարձնում TypeORM-ին որպես էություն:
- Նշեք ձեր ID հատկությունը PrimaryGeneratedColumn դեկորատորի միջոցով: Սա TypeORM-ին հուշում է id-ը նշել որպես հիմնական բանալի և ավտոմատ կերպով ավելացնել այն:
- Նշեք մնացած հատկությունները Սյունակ դեկորատորով: Սա դրանք ավելացնում է որպես սյունակներ ձեր տվյալների բազայում:
Օրինակ:
// 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;
}
Վերևում գտնվող օբյեկտի ֆայլը ստեղծում է այս աղյուսակը ձեր տվյալների բազայում.
test | ||
---|---|---|
id | int(11) | PRIMARY KEY AUTO_INCREMENT |
property_1 | varchar(255) | |
property_2 | varchar(255) | |
property_3 | varchar(255) |
TypeORM-ի փաստաթղթերն ավելի մանրամասն ընդգրկում են կազմակերպությունները:
Քայլ 3. Ձեր հավելվածը միացնելով տվյալների շտեմարանին
Այժմ, երբ ձեր կազմակերպությունը ստեղծվել է, դուք պետք է ձեր դիմումը միացնեք տվյալների բազային: Այս օրինակը օգտագործում է SQLite:
Ձեր դիմումը տվյալների բազային միացնելու համար հետևեք հետևյալ քայլերին.
- Ձեր հավելվածների արմատային մոդուլում (սովորաբար app.module.ts ֆայլ) ներմուծեք TypeOrmModule @nestjs/typeorm-ից:
- Նույն ֆայլում ներմուծեք ձեր բոլոր սուբյեկտները:
- ներմուծումների զանգվածում կանչեք forRoot մեթոդը TypeOrmModule-ում: ForRoot մեթոդը կիսում է տվյալների բազայի կապը ձեր հավելվածի բոլոր մոդուլների միջոցով:
- Դատարկ օբյեկտը որպես փաստարկ փոխանցեք forRoot մեթոդին; սա կլինի TypeORM կոնֆիգուրացիայի օբյեկտը:
- Կազմաձևման օբյեկտին ավելացրեք հատկություն՝ type և դրեք այն «sqlite»: Type հատկությունը նշանակում է տվյալների բազայի անունը, որը դուք օգտագործում եք:
- Կազմաձևման օբյեկտին ավելացրեք մեկ այլ հատկություն՝ տվյալների բազա և դրեք այն “test.db”: Տվյալների բազայի հատկությունը նշանակում է ձեր նախընտրած անունը ձեր տվյալների բազայի համար:
- Կազմաձևման օբյեկտին ավելացրեք մեկ այլ հատկություն՝ սուբյեկտներ և դրեք այն դատարկ զանգվածի վրա: Լրացրեք դատարկ զանգվածը այն օբյեկտներով, որոնք ավելի վաղ ներմուծել եք:
- Ավելացրեք մեկ այլ հատկություն, համաժամացրեք և սահմանեք այն true; այս հատկությունը համաժամացնում է ձեր օբյեկտները ձեր տվյալների բազայի հետ և թարմացնում այն ամեն անգամ, երբ գործարկում եք կոդը: Մշակման ժամանակ դուք պետք է միայն սահմանեք այս հատկությունը 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-ը ավտոմատ կերպով ստեղծում է պահոց ձեր կազմակերպության համար, երբ հետևում եք ստորև նշված քայլերին.
- Ձեր կազմակերպության մոդուլի ֆայլում ներմուծեք TypeOrmModule @nestjs/typeorm-ից և ներմուծեք ձեր կազմակերպությունը:
- Ստեղծեք ներմուծումների զանգված @Module դեկորատորում:
- Ներմուծման զանգվածում կանչեք forFeature մեթոդը TypeOrmModule-ում:
- Զանգվածը որպես փաստարկ փոխանցեք ձեր մեջ և լրացրեք զանգվածը ձեր էությամբ:
// 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. Ձեր պահեստի ներարկումն իր ծառայությանը՝ օգտագործելով կախվածության ներարկում
Կախվածության ներարկումը ծրագրային ինժեներական տեխնիկա է, որը կառավարման սկզբունքի հակադարձման ձև է: Այն տեղափոխում է կախվածության կառավարման բեռը հաճախորդի ծածկագրից դեպի գրադարան կամ ծառայություն, որից կախված է:
Հետևեք ստորև նշված քայլերին՝ ձեր պահեստը ծառայության մեջ ներարկելու համար.
- Ձեր սպասարկման ֆայլում ներմուծեք Repository typeorm-ից և InjectRepository դեկորատորը @nestjs/typeorm-ից: Նաև ներմուծեք այն կազմակերպությունը, որը ցանկանում եք ներարկել դրա պահեստը:
- Ձեր սպասարկման դասում ստեղծեք կոնստրուկտոր:
- Հայտարարեք մասնավոր փոփոխականը՝ 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-ով
Դուք կարող եք կատարել ցանկացած պարզ SQL հարցում՝ զանգահարելով TypeORM-ի պահեստավորման մեթոդները repo փոփոխականի վրա ձեր ծառայության դասի ներսում: Կարող եք նաև ստեղծել բարդ SQL հարցումներ՝ օգտագործելով TypeORM-ի հարցումների ստեղծողը: