GraphQL Union中多个类型的模式

GraphQL Union中多个类型的模式,graphql,apollo-server,Graphql,Apollo Server,我正在学习GraphQL(使用Apollo服务器)中的接口和联合,我想知道一些事情。使用文档示例,如何返回可以返回作者和书籍的结果 我的理解是,您只能返回一种对象类型。如果搜索结果同时包含书籍和作者的名称和数组,那么如何返回这样的结果?这件事能安排好吗?我注意到,\uu resolveType在数组中不起作用,只能返回一个结果(它将返回数组中所有对象的类型,而不是数组中的每个对象) GraphQL类型定义 分解器 const解析器={ 结果:{ __resolveType(对象、上下文、信息){

我正在学习GraphQL(使用Apollo服务器)中的接口和联合,我想知道一些事情。使用文档示例,如何返回可以返回作者和书籍的结果

我的理解是,您只能返回一种对象类型。如果搜索结果同时包含书籍和作者的名称和数组,那么如何返回这样的结果?这件事能安排好吗?我注意到,
\uu resolveType
在数组中不起作用,只能返回一个结果(它将返回数组中所有对象的类型,而不是数组中的每个对象)

GraphQL类型定义 分解器
const解析器={
结果:{
__resolveType(对象、上下文、信息){
控制台日志(obj);
if(对象名称){
返回“作者”;
}
if(对象标题){
归还“书”;
}
返回null;
},
},
查询:{
搜索:()=>{…}
},
};
const server=新服务器({
typeDefs,
解析器,
});
server.listen().then({url})=>{

log(`只有两种情况会发生:

  • 搜索
    字段的类型实际上不是一个列表(即它是
    结果
    ,而不是
    [Result]
    ,如上面的代码所示
  • search
    字段的解析程序正在返回一个对象数组:
    return[[{title:'A'},{title:'B'},{name:'C'}]]

  • 只有两种情况会发生:

  • 搜索
    字段的类型实际上不是一个列表(即它是
    结果
    ,而不是
    [Result]
    ,如上面的代码所示
  • search
    字段的解析程序正在返回一个对象数组:
    return[[{title:'A'},{title:'B'},{name:'C'}]]

  • 我通过
    console.log(obj)
    输出结果,并获得
    [{title:'A'},{title:'B'},{name:'C'}]
    谢谢丹尼尔(我再次通过
    console.log(obj)
    输出结果并获得
    [{title:'A'},{title:'B'},{name:'C'}]
    谢谢丹尼尔(再次)
    const { gql } = require('apollo-server');
    
    const typeDefs = gql`
      union Result = Book | Author
    
      type Book {
        title: String
      }
    
      type Author {
        name: String
      }
    
      type Query {
        search: [Result]
      }
    `;