<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 秘籍 ## CRUD生成器 在一個項目的生命周期中,當我們新增特性的時候,我們通常需要在應用中添加新的資源。這些資源通常需要我們在每次新增資源的時候進行一些重復操作。 ### 介紹 想象一下真實世界中的場景,我們需要通過兩個CRUD的終端暴露`User`和`Product`兩個實體。參考最佳時間,我們為每個實體進行以下操作。 - 生成一個模塊 (nest g mo) 來組織代碼,使其保持清晰的界限(將相關模塊分組) - 生成一個控制器 (nest g co) 來定義CRUD路徑(或者GraphQL應用的查詢和變更) - 生成一個服務 (nest g s) 來表示/隔離業務邏輯 - 生成一個實體類/接口來代表資源數據類型 - 生成數據轉換對象(或者`GraphQL`應用輸入)來決定數據如何通過網絡傳輸 很多步驟! 為了加速執行重復步驟,`Nest CLI`提供了一個生成器(`schematic(原理)`)可以自動生成所有的模板文件以減少上述步驟,同時讓開發者感覺更易用。 > 該`schematic`支持生成`HTTP`控制器,`微服務`控制器,`GraphQL`處理器(代碼優先或者原理優先),以及`WebSocket`網關等。 ### 生成新資源 在項目根目錄下執行以下代碼來生成資源。 ```bash $ nest g resource ``` `nest g resource`命令不僅僅生成所有Nestjs構件模塊(模塊,服務,控制器類)也生成實體類,`DTO`類和測試(.spec)文件。 如下是一個生成的控制器 (`REST API`): ```TypeScript @Controller('users') export class UsersController { constructor(private readonly usersService: UsersService) {} @Post() create(@Body() createUserDto: CreateUserDto) { return this.usersService.create(createUserDto); } @Get() findAll() { return this.usersService.findAll(); } @Get(':id') findOne(@Param('id') id: string) { return this.usersService.findOne(+id); } @Put(':id') update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto) { return this.usersService.update(+id, updateUserDto); } @Delete(':id') remove(@Param('id') id: string) { return this.usersService.remove(+id); } } ``` 它也自動生成了所有CRUD終端占位符(REST API路徑,GraphQL查詢和編譯,微服務和WebSocket網關的消息訂閱器)--一鍵所有內容。 > 生成的資源類未與任何特定ORM(或者數據源)綁定,以在任何項目下通用。默認地,所有方法都包含了占位符,允許你用特定項目的數據源填充。類似地,如果你需要生成GraphQL應用的處理器,只要在傳輸層選擇GraphQL(代碼優先)或者GraphQL(原理優先)即可。 這里生成一個處理器類而不是一個REST API控制器: ```bash $ nest g resource users > ? What transport layer do you use? GraphQL (code first) > ? Would you like to generate CRUD entry points? Yes > CREATE src/users/users.module.ts (224 bytes) > CREATE src/users/users.resolver.spec.ts (525 bytes) > CREATE src/users/users.resolver.ts (1109 bytes) > CREATE src/users/users.service.spec.ts (453 bytes) > CREATE src/users/users.service.ts (625 bytes) > CREATE src/users/dto/create-user.input.ts (195 bytes) > CREATE src/users/dto/update-user.input.ts (281 bytes) > CREATE src/users/entities/user.entity.ts (187 bytes) > UPDATE src/app.module.ts (312 bytes) ``` > 像這樣傳遞`--no-spec`參數`nest g resource users --no-spec`來避免生成測試文件。 在下面我們可以看到,不僅生成了所有變更和查詢的樣板文件,也把他們綁定到了一起,我們可以使用`UsersService`, `User Entity`, 和`DTO`。 ```TypeScript import { Resolver, Query, Mutation, Args, Int } from '@nestjs/graphql'; import { UsersService } from './users.service'; import { User } from './entities/user.entity'; import { CreateUserInput } from './dto/create-user.input'; import { UpdateUserInput } from './dto/update-user.input'; @Resolver(() => User) export class UsersResolver { constructor(private readonly usersService: UsersService) {} @Mutation(() => User) createUser(@Args('createUserInput') createUserInput: CreateUserInput) { return this.usersService.create(createUserInput); } @Query(() => [User], { name: 'users' }) findAll() { return this.usersService.findAll(); } @Query(() => User, { name: 'user' }) findOne(@Args('id', { type: () => Int }) id: number) { return this.usersService.findOne(id); } @Mutation(() => User) updateUser(@Args('updateUserInput') updateUserInput: UpdateUserInput) { return this.usersService.update(updateUserInput.id, updateUserInput); } @Mutation(() => User) removeUser(@Args('id', { type: () => Int }) id: number) { return this.usersService.remove(id); } } ```
                  <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>

                              哎呀哎呀视频在线观看