我是GraphQL和Apollo Server的新手,尽管我已经搜索了文档和Google以获得答案。我正在使用apollo-server-express来从第三方REST API获取数据。REST API的字段使用snake_case。有没有简单的方法或Apollo Server规范方法将所有已解析的字段名称转换为camelCase?
我想使用驼峰式的情况来定义我的类型:
type SomeType { id: ID! createdTime: String updatedTime: String }
但是REST API返回的对象如下:
{ "id": "1234" "created_time": "2018-12-14T17:57:39+00:00", "updated_time": "2018-12-14T17:57:39+00:00", }
我真的很想避免在我的解析器中手动规范化字段名称,即
Query: { getObjects: () => new Promise((resolve, reject) => { apiClient.get('/path/to/resource', (err, response) => { if (err) { return reject(err) } resolve(normalizeFields(response.entities)) }) }) }
鉴于我希望解析器的数量很大,因此这种方法似乎容易出错。还感觉规范化字段名称不应该由解析程序负责。Apollo Server是否有某些功能可以让我批发标准化字段名称或覆盖默认字段分辨率?
@Webber提出的解决方案是有效的。
也可以将fieldResolver参数传递给ApolloServer构造函数,以覆盖程序graphql
包提供的默认字段解析器。
const snakeCase = require('lodash.snakecase')
const snakeCaseFieldResolver = (source, args, contextValue, info) => {
return source[snakeCase(info.fieldName)]
}
const server = new ApolloServer({
fieldResolver: snakeCaseFieldResolver,
resolvers,
typeDefs
})
请参阅源代码中的默认字段解析器graphql