<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## Sequelize ### SQL (Sequelize) 本章僅適用于 `TypeScript` > 在本文中,您將學習如何使用自定義提供者機制從零開始創建基于 **Sequelize** 包的 `DatabaseModule`。由于該解決方案包含許多開銷,因此您可以使用開箱即用的 `@nestjs/sequelize` 軟件包。要了解更多信息,請參閱 [此處](https://docs.nestjs.com/techniques/database#sequelize-integration)。 `Sequelize` 是一個用普通 `JavaScript` 編寫的流行對象關系映射器( `ORM` ),但是有一個 `Sequelize-TypeScript` 包裝器,它為基本 `Sequelize` 提供了一組裝飾器和其他附加功能。 ### 入門 要開始使用這個庫,我們必須安裝以下附件: ```bash $ npm install --save sequelize sequelize-typescript mysql2 $ npm install --save-dev @types/sequelize ``` 我們需要做的第一步是創建一個 `Sequelize` 實例,并將一個 `options` 對象傳遞給構造函數。另外,我們需要添加所有模型(替代方法是使用 `modelPaths` 屬性)并同步數據庫表。 > database.providers.ts ```typescript import { Sequelize } from 'sequelize-typescript'; import { Cat } from '../cats/cat.entity'; export const databaseProviders = [ { provide: 'SEQUELIZE', useFactory: async () => { const sequelize = new Sequelize({ dialect: 'mysql', host: 'localhost', port: 3306, username: 'root', password: 'password', database: 'nest', }); sequelize.addModels([Cat]); await sequelize.sync(); return sequelize; }, }, ]; ``` > 按照最佳實踐,我們在分隔的文件中聲明了帶有 `*.providers.ts` 后綴的自定義提供程序。 然后,我們需要導出這些提供程序,使它們可用于應用程序的其他部分。 ```typescript import { Module } from '@nestjs/common'; import { databaseProviders } from './database.providers'; @Module({ providers: [...databaseProviders], exports: [...databaseProviders], }) export class DatabaseModule {} ``` 現在我們可以使用 `@Inject()` 裝飾器注入 `Sequelize` 對象。 每個將依賴于 `Sequelize` 異步提供程序的類將等待 `Promise` 被解析。 ### 模型注入 在 `Sequelize` 中,模型在數據庫中定義了一個表。該類的實例表示數據庫行。首先,我們至少需要一個實體: > cat.entity.ts ```typescript import { Table, Column, Model } from 'sequelize-typescript'; @Table export class Cat extends Model<Cat> { @Column name: string; @Column age: number; @Column breed: string; } ``` `Cat` 實體屬于 `cats` 目錄。 此目錄代表 `CatsModule` 。 現在是時候創建一個存儲庫提供程序了: > cats.providers.ts ```typescript import { Cat } from './cat.entity'; export const catsProviders = [ { provide: 'CATS_REPOSITORY', useValue: Cat, }, ]; ``` ?> 在實際應用中,應避免使用魔術字符串。 `CATS_REPOSITORY` 和 `SEQUELIZE` 都應保存在單獨的 `constants.ts` 文件中。 在 `Sequelize` 中,我們使用靜態方法來操作數據,因此我們在這里創建了一個別名。 現在我們可以使用 `@Inject()` 裝飾器將 `CATS_REPOSITORY` 注入到 `CatsService` 中: > cats.service.ts ```typescript import { Injectable, Inject } from '@nestjs/common'; import { CreateCatDto } from './dto/create-cat.dto'; import { Cat } from './cat.entity'; @Injectable() export class CatsService { constructor( @Inject('CATS_REPOSITORY') private readonly CATS_REPOSITORY: typeof Cat) {} async findAll(): Promise<Cat[]> { return this.catsRepository.findAll<Cat>(); } } ``` 數據庫連接是異步的,但是 `Nest` 使此過程對于最終用戶完全不可見。 `CATS_REPOSITORY` 提供程序正在等待數據庫連接,并且 `CatsService` 將延遲,直到準備好使用存儲庫為止。 實例化每個類時,啟動整個應用程序。 這是最終的 `CatsModule`: > cats.module.ts ```typescript import { Module } from '@nestjs/common'; import { CatsController } from './cats.controller'; import { CatsService } from './cats.service'; import { catsProviders } from './cats.providers'; import { DatabaseModule } from '../database/database.module'; @Module({ imports: [DatabaseModule], controllers: [CatsController], providers: [ CatsService, ...catsProviders, ], }) export class CatsModule {} ``` > 不要忘記將 `CatsModule` 導入到根 `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>

                              哎呀哎呀视频在线观看