【问题标题】:Is there a way that we can declare the type from a different gql file?有没有办法可以从不同的 gql 文件中声明类型?
【发布时间】:2020-05-19 09:14:54
【问题描述】:

我一直在努力实现这一目标。我目前正在学习 Apollo Server 和 GraphQL。我去了不同的文档,但似乎找不到答案。这就是我想要做的。

我有 usertypes.js,这是代码 sn-p:

const { gql } = require('apollo-server');

const UserTypeDefs = gql`
  type User {
    _id: ID!,
    username: String!,
    password: String!,
  }
`;

module.exports = UserTypeDefs;

在我的 logintypes.js 上:

const { gql } = require('apollo-server');
const { UserTypeDefs } = require('./usertypes.js') 

const LoginTypeDefs = gql`
    type LoginResponse {
        user: UserTypeDefs.User //this is not working. :(
    }

    extend type Mutation {
        login(username: String!, password: String!): LoginResponse!
    }
`;


module.exports = LoginTypeDefs;

感谢任何帮助。我不想在我的 logintypes.js 中再次声明我的 type User

提前谢谢你。

【问题讨论】:

  • 您是否遇到任何错误?你如何定义not working?与其重新声明任何类型,不如创建一个由UserLogin 组成的executableSchema,据我所知,应该不会有任何错误。这里有一篇文章可以帮助您了解如何实现这一目标:blog.apollographql.com/…
  • 我点击了您提供的这个链接,我能够解决我的问题。我从 usertypes.js 和 logintypes.js 中删除了 const { gql } = require('apollo-server'); 然后将我的 typedefs 声明为字符串而不是 gql``;谢谢!
  • 很高兴知道您解决了它。玩得开心

标签: graphql apollo-server graphql-schema


【解决方案1】:

无需导入其他模块。只需按名称引用类型即可:

type LoginResponse {
  user: User
}

然后,当您创建 ApolloServer 实例时,将 typeDefs 作为数组传入:

const userTypeDefs = require(...)
const loginTypeDefs = require(...)

const apollo = new ApolloServer({
  typeDefs: [userTypeDefs, loginTypeDefs],
  ...
})

【讨论】:

    猜你喜欢
    • 2018-02-23
    • 2017-09-29
    • 1970-01-01
    • 2013-01-18
    • 2021-06-15
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多