【问题标题】:Provide explicit type for the mutation GraphQL为突变 GraphQL 提供显式类型
【发布时间】:2021-08-20 04:49:12
【问题描述】:

我正在尝试创建一个接受产品列表的突变。但是这样做 GraphQL 会为 createMultipleProducts 方法抛出错误。不知道这里有什么错误。

import { Inject } from "@nestjs/common";
import { Args, Mutation, Query, Resolver } from "@nestjs/graphql";
import { ClientProxy } from "@nestjs/microservices";
import { ProductRequest } from "src/types/ms-product/product.request.type";
import { ProductResponse } from "src/types/ms-product/product.response.type";
@Resolver(of => ProductResponse)
export class ProductResolver {

  constructor(
    @Inject('SERVICE__PRODUCT') private readonly clientServiceProduct: ClientProxy
  ) {}

  @Mutation(returns => ProductResponse)
  async createProduct(@Args('data') product: ProductRequest): Promise<ProductResponse> {
    const PATTERN = {cmd: 'ms-product-create'};
    const PAYLOAD = product;
    return this.clientServiceProduct.send(PATTERN, PAYLOAD)
    .toPromise()
    .then((response: ProductResponse) => {
      return response;
    })
    .catch((error) => {
      return error;
    })
  }

  @Mutation(returns => [ProductResponse])
  async createMultipleProducts(@Args('data') products: [ProductRequest]): Promise<Array<ProductResponse>> {
    try {
      const PROMISES = products.map(async (product: ProductRequest) => {
        const PATTERN = {cmd: 'ms-product-create'};
        const PAYLOAD = product;
        return await this.clientServiceProduct.send(PATTERN, PAYLOAD).toPromise();
      });
  
      return await Promise.all(PROMISES);
    } catch (error) {
      throw new Error(error);
    }
  }

  @Query(returns => ProductResponse)
  async readProduct(@Args('data') id: string) {
    return {}
  }
}

我收到此错误:

UnhandledPromiseRejectionWarning: Error: Undefined type error. Make sure you are providing an explicit type for the "createMultipleProducts" (parameter at index [0]) of the "ProductResolver" class.

【问题讨论】:

    标签: graphql nestjs


    【解决方案1】:

    如果它是一个复杂的对象数组,则需要明确告知 GraphQL 参数的类型。

    @Mutation(returns => [ProductResponse])
    async createMultipleProducts(@Args({ name: 'data', type: () => [ProductRequest] }) products: ProductRequest[]): Promise<Array<ProductResponse>> {
      ...
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-18
      • 2019-07-20
      • 2019-11-18
      • 2017-12-20
      • 2021-12-04
      • 1970-01-01
      • 2020-07-30
      • 2020-09-22
      • 2017-09-18
      相关资源
      最近更新 更多