<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## TypeORM **本章僅適用于TypeScript** > 在本文中,您將學習如何使用自定義提供者機制從零開始創建基于 **TypeORM** 包的 `DatabaseModule` 。由于該解決方案包含許多開銷,因此您可以使用開箱即用的 `@nestjs/typeorm` 軟件包。要了解更多信息,請參閱 [此處](https://docs.nestjs.com/techniques/sql)。 [TypeORM](https://github.com/typeorm/typeorm) 無疑是 `node.js` 世界中最成熟的對象關系映射器(`ORM` )。由于它是用 `TypeScript` 編寫的,所以它在 `Nest` 框架下運行得非常好。 ### 入門 在開始使用這個庫前,我們必須安裝所有必需的依賴關系 ```bash $ npm install --save typeorm mysql2 ``` 我們需要做的第一步是使用從 `typeorm` 包導入的 `createConnection()` 函數建立與數據庫的連接。`createConnection()` 函數返回一個 `Promise`,因此我們必須創建一個[異步提供者](/8/fundamentals.md?id=異步提供者 ( `Asynchronous providers` ))。 > database.providers.ts ```typescript import { createConnection } from 'typeorm'; export const databaseProviders = [ { provide: 'DATABASE_CONNECTION', useFactory: async () => await createConnection({ type: 'mysql', host: 'localhost', port: 3306, username: 'root', password: 'root', database: 'test', entities: [ __dirname + '/../**/*.entity{.ts,.js}', ], synchronize: true, }), }, ]; ``` >不應在生產中使用設置 synchronize: true - 否則您可能會丟失生產數據。 > 按照最佳實踐,我們在分離的文件中聲明了自定義提供者,該文件帶有 `*.providers.ts` 后綴。 然后,我們需要導出這些提供者,以便應用程序的其余部分可以 **訪問** 它們。 > database.module.ts ```typescript import { Module } from '@nestjs/common'; import { databaseProviders } from './database.providers'; @Module({ providers: [...databaseProviders], exports: [...databaseProviders], }) export class DatabaseModule {} ``` 現在我們可以使用 `@Inject()` 裝飾器注入 `Connection` 對象。依賴于 `Connection` 異步提供者的每個類都將等待 `Promise` 被解析。 ### 存儲庫模式 [TypeORM](https://github.com/typeorm/typeorm) 支持存儲庫設計模式,因此每個實體都有自己的存儲庫。這些存儲庫可以從數據庫連接中獲取。 但首先,我們至少需要一個實體。我們將重用官方文檔中的 `Photo` 實體。 > photo.entity.ts ```typescript import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class Photo { @PrimaryGeneratedColumn() id: number; @Column({ length: 500 }) name: string; @Column('text') description: string; @Column() filename: string; @Column('int') views: number; @Column() isPublished: boolean; } ``` `Photo` 實體屬于 `photo` 目錄。此目錄代表 `PhotoModule` 。現在,讓我們創建一個 **存儲庫** 提供者: > photo.providers.ts ```typescript import { Connection, Repository } from 'typeorm'; import { Photo } from './photo.entity'; export const photoProviders = [ { provide: 'PHOTO_REPOSITORY', useFactory: (connection: Connection) => connection.getRepository(Photo), inject: ['DATABASE_CONNECTION'], }, ]; ``` !> 請注意,在實際應用程序中,您應該避免使用魔術字符串。`PhotoRepositoryToken` 和 `DbConnectionToken` 都應保存在分離的 `constants.ts` 文件中。 在實際應用程序中,應該避免使用魔法字符串。`PHOTO_REPOSITORY` 和 `DATABASE_CONNECTION` 應該保持在單獨的 `constants.ts` 文件中。 現在我們可以使用 `@Inject()` 裝飾器將 `Repository<Photo>` 注入到 `PhotoService` 中: > photo.service.ts ```typescript import { Injectable, Inject } from '@nestjs/common'; import { Repository } from 'typeorm'; import { Photo } from './photo.entity'; @Injectable() export class PhotoService { constructor( @Inject('PHOTO_REPOSITORY') private readonly photoRepository: Repository<Photo>, ) {} async findAll(): Promise<Photo[]> { return this.photoRepository.find(); } } ``` 數據庫連接是 **異步的**,但 `Nest` 使最終用戶完全看不到這個過程。`PhotoRepository` 正在等待數據庫連接時,并且`PhotoService` 會被延遲,直到存儲庫可以使用。整個應用程序可以在每個類實例化時啟動。 這是一個最終的 `PhotoModule` : > photo.module.ts ```typescript import { Module } from '@nestjs/common'; import { DatabaseModule } from '../database/database.module'; import { photoProviders } from './photo.providers'; import { PhotoService } from './photo.service'; @Module({ imports: [DatabaseModule], providers: [ ...photoProviders, PhotoService, ], }) export class PhotoModule {} ``` ?> 不要忘記將 `PhotoModule` 導入到根 `ApplicationModule` 中。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看