无法为graphql中的不可空字段返回null

Posted

技术标签:

【中文标题】无法为graphql中的不可空字段返回null【英文标题】:Cannot return null for non-nullable field in graphql 【发布时间】:2021-10-29 23:39:05 【问题描述】:

我有一个 Apollo 服务器查询,它根据 userIdvalue 返回一组电影:

  moviesFromUser: async (root, args) => 
    const movie = await prisma.movie.findMany(
      where: userId: args.userId,
    );
    console.log(movie);
    return movie;
  ,

在沙盒中,我有一个查询来获取基于 userId 的电影:

query moviesFromUser 
  moviesFromUser(userId: 1) 
    original_title
  

当我运行这个查询时,我在 Apollo 服务器的控制台日志中看到了我请求的电影:

[
  
    id: 251,
    original_title: 'Dune',
    tmdb_id: 2,
    poster_path: 'cDbNAY0KM84cxXhmj8f0dLWza3t.jpg',
    userId: 1
  ,
  
    id: 252,
    original_title: 'Batman',
    tmdb_id: 3,
    poster_path: 'asdadsdasadsadsdas.jpg',
    userId: 1
  
]

但操场上的实际反应是:

"message": "不能为不可为空的字段 Movie.original_title 返回 null。"

【问题讨论】:

【参考方案1】:

感谢 shankie_san 他在这里的回答解决了这个问题 > Apollo GraphQL "Cannot return null for non-nullable field Mutation.createUser"

我的问题是这个解析器:

  moviesFromUser: async (root, args) => 
    const movie = await prisma.movie.findMany(
      where: userId: args.userId,
    );
    console.log(movie);
    return movie;
  ,

返回一个电影数组,但我的架构返回一个电影对象:

  type Query 
    moviesFromUser(userId: Int!): Movie
  

moviesFromUser(userId: Int!): Movie 更改为moviesFromUser(userId: Int!): [Movie] 解决了这个问题,因为现在我的架构反映了我的解析器。

【讨论】:

以上是关于无法为graphql中的不可空字段返回null的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL Apollo 无法为不可空返回 Null [重复]

Apollo graphql 正在为 mongodb 中的空子文档返回空数据

graphql序列化数据加载器问题,对于不可为null的字段[重复项],无法返回null

Apollo GraphQL“不能为不可为空的字段 Mutation.createUser 返回 null”

GraphQL 简单嵌套查询返回空字段

GraphQL 查询返回错误“不能为不可为空的字段返回 null”