当我在 Postgresql 中编写函数时,我可以添加严格,从而导致 Graphql 中需要所有参数(!),如果没有严格,所有参数都是可选的。
在非严格函数中的必填字段上,我可以抛出异常或简单地返回 null 而无需执行函数,就像参数为 null 时严格函数所做的那样。但是我怎样才能告诉 Postgraphile 需要哪些参数呢?通过注释或其他内容,或将具有默认值的参数标记为可选。
当我在 Postgresql 中编写函数时,我可以添加严格,从而导致 Graphql 中需要所有参数(!),如果没有严格,所有参数都是可选的。
在非严格函数中的必填字段上,我可以抛出异常或简单地返回 null 而无需执行函数,就像参数为 null 时严格函数所做的那样。但是我怎样才能告诉 Postgraphile 需要哪些参数呢?通过注释或其他内容,或将具有默认值的参数标记为可选。
在我的搜索中,我发现这里提出了这个问题,尤其是这个答案。我在引用中找到的答案:
此功能是通过 pgStrictFunctions 设置在 graphile-build-pg 中实现的,但目前还没有通过 postgraphile-core 向 PostGraphQL 本身公开。它所做的是将所有函数都视为严格,要求将所有参数标记为必需,除非它们具有默认值。
可以将参数标记为默认 null,但当然,具有 null 默认值的严格函数将自动返回 null 而不会被调用。
create function a(b int, c int default null)
returns int as $$
select b;
$$ language sql stable;
默认情况下,b 和 c 都不是必需的,但是使用 pgStrictFunctions 集 b 将被标记为必需(但 c 不会)。
虽然它提到了一个解决方案,但没有说明如何实施它。在整个项目(包括 node_modules)中搜索“pgStrictFunctions”也没有给出任何线索。如何实现我终于在不和谐中找到了,这就是我最终让它工作的方式:
@Module({
controllers: [],
imports: [
PostGraphileModule.forRoot({
......
graphileBuildOptions: {
pgStrictFunctions: true,
},
......
}),
],
providers: [GraphQLService],
})