網站搜尋

typescript - 使用 Code First 方法在 Nestjs 中創建突變


我正在建立一個基於 Nestjs(代碼優先方法)和 Prisma 來進行資料庫管理的 GraphQL API。我已經按照 Nestjs 的官方頁面操作,並成功為查詢、訂閱和變更創建了 resolver。我的第一個查詢運作正常,沒有任何問題。然而,在創建了一個變更之後,創建的變更不會提示任何參數,並且 GraphQL Playground 在我的變更請求中沒有顯示錯誤。這個變更負責創建一個使用者,並且應該接收兩個參數以成功完成操作。

我已經嘗試使用先有 schema 的方法重新建立這個 mutation,但應用程式在啟動時崩潰。我也嘗試在 mutation 中新增一個 name 屬性,但仍然沒有任何反應。

這是我的突變

@Mutation(returns => User, { name: 'createUser' })
  async createUser(args) {
    return await this.userService.createUser(args);
  }

以及在用戶服務中

  async create(args) {
    return await this.prismah.mutation.createUser({
      name: args.name,
      email: args.email,
    });
  }

這個變異應該在提交之前要求兩個參數,提交之後它應該在資料庫中創建一個使用者實例

答案#1

我創建了一個類 UserInput,如

import { InputType, Field } from 'type-graphql';

@InputType()
export class UserInput {
  @Field() name: string;
  @Field() email: string;
}

並將我的解析器更改為看起來像

import {Args} from '@nestjs/graphql';
import {UserInput} from './path-to-the-user-input-class-created';


@Mutation(returns => User, { name: 'createUser' })
  async createUser(@Args('data') user: UserInput) {
    return await this.userService.createUser(user);
  }

有了這些更改,我的變異現在按預期工作。它會提示所需的變量,並完成提交過程。