【问题标题】:Create GeoJSON GraphQL schema from third party library从第三方库创建 GeoJSON GraphQL 架构
【发布时间】:2019-03-17 01:14:02
【问题描述】:

我正在尝试在 Apollo/Express 应用程序中使用 graphql-geojson 库来提供 GeoJSON 响应。

该库提供了解析器,但我还没有找到一种方法来将类型添加到我的架构定义中,而无需手动将它们写出来。即便如此,事实证明也不是那么简单。

另一个自定义类型,来自graphql-date 的日期,我可以在架构中声明为自定义标量:

const typeDefs: DocumentNode = gql`
  scalar Date
  scalar PointObject

  type Station {
    id: ID!
    name: String!
    geom: PointObject
    created: Date!
  }
  ...
}

但是,将 PointObject 声明为标量可以让您获得完整的 GeoJSON(没问题)但会导致错误:

"GraphQLError: 字段 \"geom\" 不能有选择,因为类型 \"GeoJSONPoint\" 没有子字段。"

当您尝试返回 geom 的子选择时,例如:

{
  stations {
    id
    name
    geom {
      coordinates
    }
  }
}

有没有办法将库提供的类型与我的架构合并?

【问题讨论】:

    标签: graphql apollo-server express-graphql


    【解决方案1】:

    Apollo 的 graphql-tools 库包括 a mergeSchemas function,它可以将多个架构和架构位组合在一起。您应该能够使用它从您的类型定义中构建一个大模式(未经测试):

    import * as GeoJSON from 'graphql-geojson';
    import { mergeSchemas } from 'graphql-tools';
    
    const typeDefs = `
      type Station {
        id: ID!
        name: String!
        geom: PointObject
        created: Date!
      }
    `;
    
    const schema = mergeSchemas({
      schemas: [Object.values(GeoJSON), typeDefs]
    });
    

    (请注意,the types graphql-geojson defines 有点牵涉其中;它们绝对不是单一的标量类型,如果可以避免的话,我不想尝试在我的架构定义中重新键入它们。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      • 2018-01-06
      • 2015-10-02
      • 2022-01-17
      • 2013-04-09
      • 2017-03-05
      • 1970-01-01
      相关资源
      最近更新 更多