【问题标题】:How can I put an Express REST layer on top of an Apollo GraphQL server?如何将 Express REST 层放在 Apollo GraphQL 服务器之上?
【发布时间】:2018-12-08 23:32:03
【问题描述】:

我正在考虑在 GraphQL 服务器 (Apollo Server v2) 之上放置一个 REST 层(使用 Express)来支持一些旧版应用程序。为了尽可能多地共享逻辑,理想情况下,REST 端点应该包装我发送到 GraphQL 服务器的 GraphQL 查询,并且能够在将响应发送到客户端之前对响应进行小的修改。

我无法找出从 Express 路由中间件查询 apollo 服务器的最佳方式。到目前为止,我已经探索了两种不同的解决方案:

  1. 修改来自 REST 端点的请求,使 req.body 成为有效的 graphql 查询,将 req.url 更改为 /graphql,然后调用 next()。这样做的问题是,我无法在将结果发送到客户端之前对其进行修改,而我需要这样做。
  2. 从路由中间件用axios调用/graphql端点,在发送给客户端之前修改响应。这行得通,但我觉得有点 hacky。

您还有其他建议,或者甚至是一个例子吗?

【问题讨论】:

    标签: node.js express graphql apollo-server


    【解决方案1】:

    我相信解决方案 2 可以实施。

    我做了一个类似的实现,但在我的例子中,一个 GraphQL 服务从另一个(多个)GraphQL 服务获取数据。 在某个地方,我做了这样的事情:

    export type serviceConnectionType = {
        endpoint: string
        queryType: {
            query: Object // gql Object Query
            variables: {
                input: Object // query arguments (can be null)
            }
        }
    }
    
    export async function connectService(params: serviceConnectionType) {
        const response = await fetch(params.endpoint, {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify(params.queryType),
        })
    
        if (response.status === 404) {
            console.warn('404 not found')
        }
    
        return response.json()
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2019-02-03
      • 2019-06-13
      • 2020-06-21
      • 2021-06-24
      • 1970-01-01
      • 2019-07-15
      • 2020-12-02
      • 2021-03-29
      相关资源
      最近更新 更多