将apollo-server-express 中的snake_case 字段名称转换为camelCase 字段名称

2023-12-05

我是 GraphQL 和 Apollo Server 的新手,尽管我已经在文档和 Google 中搜索了答案。我正在使用 apollo-server-express 从第 3 方 REST API 获取数据。 REST API 使用 Snake_case 作为其字段。是否有一种简单的方法或 Apollo Server 规范的方法将所有解析的字段名称转换为驼峰命名法?

我想使用驼峰式大小写来定义我的类型,例如:

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 构造函数来覆盖由 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源代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将apollo-server-express 中的snake_case 字段名称转换为camelCase 字段名称 的相关文章

随机推荐