我的大部分输入验证都在 GraphQL 层可用。如果其他字段具有特定值,我想通过使某些字段成为必需字段来增强它。我认为使用自定义指令可以做到这一点,但经过一些尝试后,我仍然不确定。是否可以在字段指令中访问同级字段的值?
如果没有更多上下文,很难判断这是否适合您的特定场景,但希望这会有所帮助:
你的指令将是这样的:
export class MyDirective extends SchemaDirectiveVisitor {
visitFieldDefinition(field) {
const { resolve = defaultFieldResolver } = field;
const directiveArgs = { ...this.args };
field.resolve = async function(obj, args, context, info) {
...
Run Code Online (Sandbox Code Playgroud)
从那里您可以通过访问 obj 来检索该类型的其他字段的值。
例如,对于具有以下内容的模式:
type MyType {
foo: String
bar: String @MyDirective
}
Run Code Online (Sandbox Code Playgroud)
您可以通过执行以下操作在指令中抛出错误解决栏:
export class MyDirective extends SchemaDirectiveVisitor {
visitFieldDefinition(field) {
const { resolve = defaultFieldResolver } = field;
const directiveArgs = { ...this.args };
field.resolve = async function(obj, args, context, info) {
let result = resolve.call(this, result, args, context, info);
if (obj.foo === "something" && result === null) throw new Error("Some error");
return result
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
933 次 |
| 最近记录: |