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;
}