展平Apollo GraphQL响应(数据字段)

时间:2018-10-05 10:26:33

标签: graphql graphql-js apollo-client apollo-server

客户端需要我想通过GraphQL响应提供的特定JSON结构。

不幸的是,我必须摆脱顶级的“数据”字段,并弄平该客户端的响应。

解析器有办法做到这一点吗?

发件人:

{ 
   "data" : {
      "myKey": 
         {...}
   }
}

收件人:

{ 
   "myKey": 
      {...}
}

谢谢!

1 个答案:

答案 0 :(得分:2)

通过使用formatResponse的构造函数中传递的ApolloServer选项,从技术上来说是可能的:

const formatResponse = ({ data, errors }) => data
const server = new ApolloServer({ typeDefs, resolvers, formatResponse })

或针对特定查询(例如status)执行此操作,您可以执行以下操作:

    const formatResponse = res => {
      if (res.data && res.data.status) return res.data
      return res
    }

但是,出于两个主要原因,我强烈建议您不要使用这种方法。第一,它违反了规范,这将使您的API与为显式使用GraphQL API设计的大多数客户端库不兼容。第二,它使您不必将错误(验证或其他方式)注入到实际数据中,或者完全将它们排除在外。

很难想象这样一种场景,即客户端应用程序不应该从响应中提取数据-如果您在特定的框架上遇到困难,那么听起来很不错这样的问题!