Graphql 是否基于其他未请求的字段返回自定义字段?

Graphql 是否基于其他未请求的字段返回自定义字段?,graphql,typegraphql,Graphql,Typegraphql,假设我想使用此查询获取一个人的年龄: { getUser(id: "09d14db4-be1a-49d4-a0bd-6b46cc1ceabb") { full_name age } } 我像这样解析我的getUser查询(我使用node.js,类型graphql和knex): 是否有一些奇特的graphql内置方式/约定来预测需要born_at而不是通过info/context手动执行该操作?您应该始终从查询级解析程序返回完整的实体数据,以便字段解析

假设我想使用此查询获取一个人的
年龄

{
  getUser(id: "09d14db4-be1a-49d4-a0bd-6b46cc1ceabb") {
    full_name
    age
  }
}
我像这样解析我的
getUser
查询(我使用
node.js
类型graphql
knex
):


是否有一些奇特的graphql内置方式/约定来预测需要born_at而不是通过info/context手动执行该操作?

您应该始终从查询级解析程序返回完整的实体数据,以便字段解析程序可以使用这些数据

另一种解决方案是手动维护字段解析程序所需字段的列表,以便“要knex的字段”层始终可以另外包含这些字段”


进一步的改进可能是根据请求的字段(因此将触发字段解析程序)生成一个附加列的列表。

这里没有魔法……你要求的是
年龄
,但sth应该向你询问
出生日期
?好笑话……“只返回请求的字段”(
字段
)可能包含
age
,将其映射到
born\u at
async getUser(getUserArgs: GetUserArgs, fields: UserFields[]): Promise<User> {
  // Return ONLY ASKED FIELDS
  const response = await knex.select(this.getKnexFields(fields)).from(USER).whereRaw('id = ?', [getUserArgs.id]);
  // returns { full_name: 'John Smith' }
  return response[0];
}
@FieldResolver()
age(@Root() user: User, @Info() info: GraphQLResolveInfo): number {
  console.log(user); // { full_name: 'John Smith' }  no born_at field - no age, so error
  // calculate age from born_at
  return DateTime.fromJSDate(user.born_at).diff(DateTime.fromJSDate(new Date()), ['years']).years;
}