【发布时间】:2021-09-25 13:32:36
【问题描述】:
解析器
export const resolvers = {
...
Mutation: {
register: async (
_: unknown,
{ input }: { input: RegisterInput },
{ prisma }: GraphQLRequestContext
): Promise<RegisterResult> => {
const { email, password, lastName, firstName } = input
console.log('hello')
...
(some ifs that return {
__typename: 'BadRequest',
message: 'Bad request',
})
...
return { __typename: 'AuthResult', token }
},
},
}
类型定义
export const typeDefs = gql`
type BadRequest {
message: String!
}
type Mutation {
register(input: RegisterInput!): RegisterResult!
}
input RegisterInput {
email: String!
password: String!
firstName: String
lastName: String
}
type AuthResult {
token: String!
}
union RegisterResult = AuthResult | BadRequest
`
服务器
const server = new ApolloServer({
typeDefs,
resolvers,
context: () => ({ prisma }),
})
当使用这种突变发出请求时,我得到"Cannot return null for non-nullable field Mutation.register."
如果我在我得到的突变结果中使RegisterResult 可以为空
{
"data": {
"register": null
}
}
无论哪种情况,解析器中的控制台日志都不会出现在日志中。类型是从 typedef 自动生成的。
【问题讨论】:
-
出于好奇,您是如何导入
resolvers的?如果您在调用new ApolloServer时console.log(resolvers);是您期望的对象吗? -
@loganfsmyth 奇怪的是它已经过时了吗?它在 ./resolvers/index.ts 中,我像
import { resolvers } from './resolvers'一样引用它。将其移出索引文件可以解决此问题,从索引文件中导入仍然会出现此问题,我以前从未遇到过这种情况 -
很奇怪,不知道该说什么。也许您的构建以某种方式缓存了一些错误。
标签: graphql apollo-server