问题描述
我在一个项目中使用 GraphQL,我试图根据响应返回错误和数据。下面是我的架构的示例。
interface Error {
message: String!
status: String!
}
type UserExistError implements Error {
message: String!
status: String!
}
type AccountExistError implements Error {
message: String!
status: String!
}
type AuthPayload {
user: User
token: String!
}
union AuthError = UserExistError | AccountExistError
type UserResult {
errors: AuthError!
user: AuthPayload!
}
type Mutation {
createuser(data: UserInput!): UserResult!
}
export default function makeAddUser({ userRepo }) {
return async function createuser(parent,args,context,info) {
const body = makeUser({ ...args.data })
const response = await bankService.createAcct({
firstName: body.getFirstName(),lastName: body.getLastName(),email: body.getEmail()
})
if (response.status === '400') {
const errors = {
__typename: 'AccountExistError',status: response.status,message: response.error.Message,}
return { errors }
}
const user = await userRepo.insert(...data)
const token = generatetoken()
return { __typename: 'AuthPayload',user,token}
}
}
这个函数然后像这样传递给解析器对象:
const resolver = {
Mutation: {
createuser
},Query: {}
}
然后传递给 apollo-server 配置对象。
然后在 GraphQL Playground 上,我像这样尝试变异
mutation {
createuser(
data: {
firstName: "john"
lastName: "doe"
email: "john@gmail.com"
password: "somepass1234"
dateOfBirth: "2020-01-03"
}
) {
errors {
... on AccountExistError {
message
}
}
user {
user {
email
}
}
}
}
但是运行那个突变,我得到这个错误
"Abstract type "AuthError" must resolve to an Object type at runtime for field "UserResult.errors". Either the "AuthError" type should provide a "resolveType" function or each possible type should provide an "isTypeOf" function.",
我试图通过 Apollo-server 文档了解使用联合类型,但似乎仍然不了解如何解决这个问题。欢迎任何帮助。谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)