GraphQL输入类型作为查询参数

时间:2018-10-19 17:35:39

标签: angular rest graphql typeorm

我正在使用Apollo Angular并托管GraphQL驱动的服务器。 我要实现的请求很简单。我需要传递一个对象作为请求的查询参数。这是我的要求:

return this.apollo
    .watchQuery({
        query: this.ListQuery,
        variables: {
            boundaries: {
                east: boundaries.east,
                west: boundaries.west,
                north: boundaries.north,
                south: boundaries.south,
            }
        },
        fetchPolicy: 'no-cache',
    })
    .valueChanges.pipe(
        map(({data}: any) => data.spots ? data.spots.map((spot) => new Spot(spot)) : [])
    );

查询定义为:

query SpotList($boundaries: Boundaries) {
      spots (boundaries: $boundaries) {
          ...

我在服务器上的架构定义为:

type Query {
    spot(id: String!): Spot
    spots(boundaries: Boundaries): [Spot!]! 
}

input Boundaries {
    east: Float
    north: Float
    south: Float
    west: Float
}

当我的解析器起作用时

@Query()
    async spots(boundaries) {
      console.log(boundaries) //return undefined

我想知道是否允许输入作为查询中的参数,如果不允许,应该使用哪种模式或实践。

如果可能的话,我不希望我的query在代码中明确包含每个参数。

谢谢!

  

编辑:解决了Nest Query装饰器在解析器功能中的行为,该功能对其解析器功能具有(对象,自变量,上下文,信息)模式。

1 个答案:

答案 0 :(得分:1)

正如我在问题中忘记提及的那样,我使用的是Nest服务器端,而@ nestjs / graphql引入的Decorator @Query为解析器功能提供了特殊的签名。