这可能是密码
模式
import { gql } from 'apollo-server-express';
export default gql`
extend type Mutation {
signUp(
lastName: String!
): String!
}
`;解析器
{
Query: {},
Mutation: {
signUp: async (
_,
{ lastName}
) => {
try {
console.log(lastName)
return 'ok';
} catch (error) {
return 'error';
}
},
},
};请求
mutation($lastName:String){
signUp(lastName:$lastName)
}查询版本
{"lastName":"Darjo" }我不明白,但我错了
“$lastName\”类型的变量\"String\“用于期望类型\”String!\“的位置。
但是当我移除标志! lastName: String时,一切都正常了。
我只是不明白。原因是什么?
发布于 2019-11-18 19:53:18
您已经将lastName参数的类型指定为String!。!表示类型为非空-换句话说,参数是必需的,不能等于null。
在查询中,您定义了一个变量($lastName),并为它分配了一个类型。参数可以传递变量,但只有在它们的类型匹配时才能传递。例如,如果参数采用Int,则不能将Boolean类型的变量传递给它。类似地,如果一个参数是非空的,则不能向它传递一个可为空的变量.这是因为可空变量可能为null,但这违反了参数的非空性。
注意,相反的情况不是真--一个可空的参数可以接受一个非空变量。
这是有效的:
# String! argument and String! variable
type Mutation {
signUp(lastName: String!): String!
}
mutation($lastName:String!) {
signUp(lastName:$lastName)
}同样有效的是:
# String argument and String! variable
type Mutation {
signUp(lastName: String): String!
}
mutation($lastName: String!) {
signUp(lastName: $lastName)
}如下所示:
# String argument and String variable
type Mutation {
signUp(lastName: String): String!
}
mutation($lastName: String) {
signUp(lastName: $lastName)
}但这是无效的:
# String! argument and String variable
type Mutation {
signUp(lastName: String!): String!
}
mutation($lastName: String) {
signUp(lastName: $lastName)
}唯一的例外是,如果您为变量提供了默认值。因此,这仍然有效:
# String! argument and String variable
type Mutation {
signUp(lastName: String!): String!
}
mutation($lastName: String = "Some default value") {
signUp(lastName: $lastName)
}您可以在等级库中阅读有关变量验证的内容。
https://stackoverflow.com/questions/58920213
复制相似问题