type-graphql 在传递参数时不起作用

问题描述 投票:0回答:1

我正在使用 apollo-server 和 type-graphql 开发一个 API,但是当我尝试通过查询或突变参数发送输入时,我不知道发生了什么,但无法获取数据

UserResolver.ts

import { Arg, Query, Resolver } from 'type-graphql'
import { UserModel } from '../dtos/models/UserModel'
import { CreateUserInput } from '../dtos/inputs/CreateUserInput'

@Resolver(() => UserModel)
export class UserResolver {
  // THIS WORK PERFECTLY
  @Query(() => String)
  async user(@Arg('name') name: string) {
    return name
  }

  // THIS BREAKS
  @Query(() => String)
  async users(@Arg('data') data: CreateUserInput) {
    return data.email
  }
}

创建用户输入.ts

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

@InputType()
export class CreateUserInput {
  @Field()
  email: string

  @Field()
  password: string

  @Field()
  admin: boolean
}

错误

{
  "errors": [
    {
      "message": "Argument Validation Error",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "users"
      ],
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR",
        "exception": {
          "validationErrors": [
            {
              "target": {
                "email": "email",
                "password": "password",
                "admin": false
              },
              "children": [],
              "constraints": {
                "unknownValue": "an unknown value was passed to the validate function"
              }
            }
          ],
          "stacktrace": [
            "Error: Argument Validation Error",
            "    at Object.validateArg (/home/cerutti/Projects/good-morning-jenny-api/node_modules/type-graphql/dist/resolvers/validate-arg.js:29:15)",
            "    at processTicksAndRejections (node:internal/process/task_queues:95:5)",
            "    at async Promise.all (index 0)"
          ]
        }
      }
    }
  ],
  "data": null
}

我已经尝试了本文档页面中的所有内容https://typegraphql.com/docs/resolvers.html#input-types

typescript graphql arguments typegraphql
1个回答
0
投票

看看我自己的一些代码,看起来我使用了

@Args
而不是
@Arg
- 我似乎记得
@Arg
有问题。例如:

    @Query(() => ItemsList)
    async listItems(
      @Args('listItemsInput') listItemsInput: ListItemsInput,
    ): Promise<ItemsList> {
      return this.itemsService.list(listItemsInput);
    }

也就是说,我注意到所讨论的解析器似乎旨在创建一个用户 - 您可能需要使用

@Mutation
而不是
@Query
- 不确定这是否也会对您返回的内容产生影响.

© www.soinside.com 2019 - 2024. All rights reserved.