簡體   English   中英

從 graphql 接口繼承解析器與 Apollo Server v3

[英]Inherit resolvers from graphql interface with Apollo Server v3

我想從 graphql 接口繼承解析器。

考慮這個模式。

const typeDefs = gql`
  interface Name {
    name: String!
    surname: String!
  }

  type Person implements Name {
    _id: ID!
    name: String!
    surname: String!
  }

  type Query {
    getPerson: Person!
  }
}

這些解析器:

const queryResolver = {
  Name: {
    name: () => "John",
    surname: () => "Doe"
  },

  Query: {
    getPerson: async (parent, args, context, info) => {
      return {
        _id: "1",
      };
    },
  }
}

這是我的服務器

const { ApolloServer } = require("apollo-server");

const typeDefs = require("./types");
const queryResolvers = require("./resolvers/query");

const resolvers = {
  Query: queryResolvers.Query,
  Name: queryResolvers.Name,
};
try {
  const server = new ApolloServer({
    typeDefs,
    resolvers,
  });
  server.listen().then(({ url }) => {
    console.log(`Apollo server listening on ${url}`);
  });
} catch (e) {
  console.error(e);
}

我希望在查詢服務器時

query Query {
  getPerson {
    name
    surname
  }
}

我得到了 John Doe,因為我希望PersonName繼承解析器。

在 ApolloServer v.2 上,我通過inheritResolversFromInterfaces實現了此功能https://www.apollographql.com/docs/apollo-server/v2/api/graphql-tools/

我無法在 ApolloServer v3.0 上找到和等效項

我能找到的唯一選擇是使用 @ graphql @graphql-tools/schema中的 makeExecutableSchema 創建模式,然后將該模式傳遞給 ApolloServer 構造函數:

const schema = makeExecutableSchema({
    typeDefs,
    resolvers,
    inheritResolversFromInterfaces: true,
});

const server = new ApolloServer({
    ...otherApolloArguments,
    schema,
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM