我正在使用 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
看看我自己的一些代码,看起来我使用了
@Args
而不是 @Arg
- 我似乎记得 @Arg
有问题。例如:
@Query(() => ItemsList)
async listItems(
@Args('listItemsInput') listItemsInput: ListItemsInput,
): Promise<ItemsList> {
return this.itemsService.list(listItemsInput);
}
也就是说,我注意到所讨论的解析器似乎旨在创建一个用户 - 您可能需要使用
@Mutation
而不是 @Query
- 不确定这是否也会对您返回的内容产生影响.