Apollo GraphQL - 将 .graphql 模式导入为 typeDefs

Posted

技术标签:

【中文标题】Apollo GraphQL - 将 .graphql 模式导入为 typeDefs【英文标题】:Apollo GraphQL - Import .graphql schema as typeDefs 【发布时间】:2019-04-22 10:56:25 【问题描述】:

使用 graphql-yoga,您只需执行以下操作即可导入您的架构:typeDefs: './src/schema.graphql'。 apollo-server-express 有类似的方法吗?

如果没有,如何从外部.graphql 文件中导入typeDefs?

【问题讨论】:

【参考方案1】:

您可以使用函数makeExecutableSchema 传入typeDefs。像这样的:

import  makeExecutableSchema  from 'graphql-tools';
import mySchema from './src/schema.graphql';

const app = express();

const schema = makeExecutableSchema(
  typeDefs: [mySchema],
  resolvers: 
    ...
  ,
);

app.use(
  '/graphql',
  graphqlExpress( schema )
);

【讨论】:

【参考方案2】:

我找到了一种使用grahpql-import 的方法,这正是我所需要的。请参阅下面的示例代码:

import  ApolloServer  from 'apollo-server-express'
import  importSchema  from 'graphql-import'
import Query from './resolvers/Query'

const typeDefs = importSchema('./src/schema.graphql')
const server = new ApolloServer(
    typeDefs,
    resolvers: 
        Query
    
)

const app = express()
server.applyMiddleware( app )

app.listen( port: 4000 )

**

更新:graphql-import v0.7+

**

importSchema 现在是异步的,应该作为承诺处理。只需将其包装在 async 函数中,然后只需 await 即可。

async function start() 
    const typeDefs = await importSchema(".src/schema.graphql")

【讨论】:

当前版本的 graphql-import 返回一个导致错误的承诺! @OtmanBouchari 只需将其包装在异步函数中并等待结果:)

以上是关于Apollo GraphQL - 将 .graphql 模式导入为 typeDefs的主要内容,如果未能解决你的问题,请参考以下文章

Apollo GraphQL 中带有变量的嵌套查询

模拟 graph-ql 请求

Apollo 服务器 2.0 不能与 join-monster-graphql-tools-adapter 和 oracle 一起使用

Apollo GraphQL - 将 .graphql 模式导入为 typeDefs

将 apollo 跟踪添加到 GraphQL Spring

为啥将 Apollo 与 Nuxt 一起使用需要 graphql-tag?