我正在尝试以下操作:
const CURRENT_USER_QUERY = gql`
query {
me {
id
email
name
permissions
cart {
id
quantity
item {
id
title
}
}
}
}
`
但是我无法正确解析项目字段。
这是购物车解析器(它可以正确解析,但仅适用于具有标量返回值的字段:
async function cart(parent, args, ctx, info) {
const cart = await ctx.prisma.user({ id: parent.id }).cart()
return cart
}
module.exports = {
cart,
}
它仅解析标量值id
和quantity
。 item
字段是CartItem类型:
type CartItem {
id: ID!
quantity: Int!
item: Item!
user: User!
}
如何编写解析器,以免出现此错误,例如:
Message: Cannot return null for non-nullable field CartItem.item., Location: [object Object], Path: me,cart,2,item
prisma数据库与项目和用户都有适当的关系-我可以在prisma数据库中看到它们。我只是无法正确解决该问题。如果我返回有效的商品ID,就会得到该商品。
答案 0 :(得分:0)
正如您所说,当您运行await ctx.prisma.user({ id: parent.id }).cart()
时,prisma只会得到标量值,而这是从cart
解析器中转发出来的唯一值
您需要为该特定字段创建解析器。像这样:
const Cart = {
item: (parent, args, ctx, info) => {
return ctx.prisma.cart({ id: parent.id }).item()
},
}
export { Cart as default }
然后,在定义服务器的架构时,您需要包括解析器文件:
import Cart from './resolvers/Cart';
const schema = {
typeDefs: 'api/schema.graphql',
resolvers: {
Query,
Mutation,
Cart,
},
context: async (request) => {
// whatever you had here before
},
};
const server = new GraphQLServer(schema);
这种方法还允许您公开用于类型的计算字段(例如:用于计算所有购物车项目平均值的字段)。
P.S .:我会稍微更改一下您的架构。我将创建一个引用CartItem
和quantity: Int
的{{1}},并将它们包含在您的item: Item