使用替代 GraphQL 客户端连接到 Apollo Server

Posted

技术标签:

【中文标题】使用替代 GraphQL 客户端连接到 Apollo Server【英文标题】:Using an alternative GraphQL client to connect to Apollo Server 【发布时间】:2020-04-27 20:46:07 【问题描述】:

是否可以使用非 Apollo 客户端(例如 graphql.js - https://github.com/f/graphql.js)连接到 Apollo GraphQL 服务器?

如果是这样,应该使用哪个端点?还是有其他方法?

这会失败并出现HTTP 500 服务器错误:

const graph = graphql('http://localhost:3013/graphql', 
        method: 'POST' // POST by default.
    );

    const res = graph(`query getQuestions 
        questions 
          id,
          question
        
      
    `);

    res().
        then((result) => console.log(result))
        .catch((err) => console.log(err));

【问题讨论】:

【参考方案1】:

当然,您可以使用任何 GraphQL 客户端,只要客户端遵循 GraphQL 规范即可。

例如

server.ts:

import  ApolloServer, gql  from 'apollo-server';
import graphql from 'graphql.js';

const typeDefs = gql`
  type Query 
    _: String
  
`;
const resolvers = 
  Query: 
    _: () => 'Hello',
  ,
;
const server = new ApolloServer(
  typeDefs,
  resolvers,
);
server.listen().then(async ( url ) => 
  console.log(`Apollo server is listening on $urlgraphql`);
  const graph = graphql(`$urlgraphql`,  asJSON: true );
  const helloQuery = graph(`
    query 
      _
    
  `);
  const actual = await helloQuery();
  console.log('actual: ', actual);
  server.stop();
);

输出:

Apollo server is listening on http://localhost:4000/graphql
actual:   _: 'Hello' 

【讨论】:

我缺少的部分是: asJSON: true 如果我补充说它工作正常。我正在使用 CDN 链接 - 出于遗留原因。目前尚不清楚asJSON 设置的作用。

以上是关于使用替代 GraphQL 客户端连接到 Apollo Server的主要内容,如果未能解决你的问题,请参考以下文章

Apollo 客户端无法连接到 GraphQL 服务器(http 调用执行失败)

将 Strapi 连接到 NextJS/Apollo 客户端 GraphQL - 未提供所需类型“XXX”的变量“$input”

如何使用另一种编程语言连接到 apollo graphql-websocket?

通过 apollo 连接到 graphql-yoga 服务器进行订阅的正确方法是啥?

GraphQL 查询,具有动态字段

graphql 订阅无法连接到弹性 beantalk 的 websocket 端点