【发布时间】:2019-11-13 10:55:59
【问题描述】:
我在这个问题上已经解决了大约一周的时间,但网上没有解决它。不返回任何数据对象,甚至不返回“null”。我正在从一个正常工作的 REST CRUD 应用程序转换为 GraphQL。没有我想象的那么容易。
我在 Playground 中的突变:
mutation createMember($input: MemberInput!) {
createMember (input: $input) {
first_name
last_name
user_name
}
}
下面的 Playground 查询变量:(不在标题部分。)
{
"input": {
"first_name": "John",
"last_name": "Creston",
"user_name": "jc"
}
}
架构:(查询工作正常,成员类型(TypeORM 中的一个实体)与它们一起使用,并且是完整的 REST CRUD。)
input MemberInput {
first_name: String!
last_name: String!
user_name: String!
}
type Mutation {
createMember(input: MemberInput!): Member!
}
type Query {
getMembers: [Member]
getMember(member_id: Int!): Member!
checkUserName(user_name: String): Member
checkEmail(email: String): Member
}
我看不出解析器可能是这个错误消息的问题,但我会添加 Nestjs 解析器:
@Mutation('createMember')
async createMember(@Args('input') input: MemberInput): Promise<Members> {
console.log('input in resolver: ', input);
return await this.membersService.addItem(input);
}
该服务与 REST 和查询一起使用,所以这应该是一个问题。解析器中的 console.log 永远不会出现在终端中。
从复制 CURL 按钮:
curl 'http://localhost:3000/graphql' -H 'Accept-Encoding: gzip,
deflate, br' -H 'Content-Type: application/json' -H 'Accept:
application/json' -H 'Connection: keep-alive' -H 'DNT: 1' -H 'Origin:
http://localhost:3000' --data-binary '{"query":"mutation
createMember($input: MemberInput!) {\n createMember (input: $input)
{\n first_name\n middle_initial\n last_name\n
user_name\n pitch\n main_skill_title\n \tskill_id_array\n
skills_comments\n other_skills\n links\n country\n
email\n member_status\n }\n}"}' --compressed
【问题讨论】:
-
这是一个请求验证错误,它的意思正是它所说的,变量
$input丢失了。您可以通过在浏览器的开发工具中打开网络选项卡并检查 Playground 向您的服务器发出的请求来仔细检查变量是否正在发送。如果您看到此错误,我可以保证请求正文中没有input变量。 -
听起来不像是个混蛋,但您确定您将变量放在正确的文本字段中吗?我可以在“VARIABLES”和“HTTP HEADERS”之间切换,我所在选项卡的唯一指示是它的颜色是略浅的灰色。我以前把它们混在一起了。
-
@DanielRearden 是的。当我单击标题时,什么都没有。当我点击变量时,有我的 JSON。变量突出显示。有趣的是,如果 JSON 在任何一个中,我都会收到相同的消息。我不明白。
-
可能是 Playground 本身的一些奇怪错误。一时兴起,您可以点击
COPY CURL按钮并使用生成的命令编辑您的问题吗? -
@DanielRearden 我添加了它。希望您了解该输出。为简单起见,我在帖子中简要介绍了我的突变和输入。这显示了完整的对象。当我编辑掉大部分对象时,两者都有相同的错误。我已经删除了简要测试。