我正在使用模式指令,该指令实现visitFieldDefinition
的{{1}}功能。我想知道模式中定义的字段的类型,例如,如果类型是数组。
在架构中:
SchemaDirectiveVisitor
属性指令:
type DisplayProperties {
description: StringProperty @property
descriptions: [StringProperty]! @property
}
使用Apollo服务器和graphql工具。
答案 0 :(得分:1)
传递给import os
os.system("journalctl -f")
if if_something_new:
do_something(text)
的第一个参数是visitFieldDefinition
对象:
GraphQLField
要获取类型,您可以执行以下操作:
interface GraphQLField<TSource, TContext, TArgs = { [key: string]: any }> {
name: string;
description: Maybe<string>;
type: GraphQLOutputType;
args: GraphQLArgument[];
resolve?: GraphQLFieldResolver<TSource, TContext, TArgs>;
subscribe?: GraphQLFieldResolver<TSource, TContext, TArgs>;
isDeprecated?: boolean;
deprecationReason?: Maybe<string>;
astNode?: Maybe<FieldDefinitionNode>;
}
如果字段为非空,列表或二者的某种组合,则需要“解包”类型。您可以随时检查包装类型是否为列表:
const type = field.type
答案 1 :(得分:0)
我们可以用
检查graphql类型const { GraphQLString } = require('graphql');
const type = field.type
if(field.type === GraphQLString) return 'string'
我是如何使用它的?我需要使用 S3 根 URL 为 S3 对象键添加前缀,因此我创建了一个指令来执行此操作,它检查并返回条件字符串和数组。还有代码。
const { SchemaDirectiveVisitor } = require('apollo-server');
const { defaultFieldResolver, GraphQLString, GraphQLList } = require('graphql');
class S3Prefix extends SchemaDirectiveVisitor {
visitFieldDefinition(field) {
const { resolve = defaultFieldResolver } = field;
field.resolve = async function (...args) {
const result = await resolve.apply(this, args);
if (field.type === GraphQLString) {
if (result) {
return [process.env.AWS_S3_PREFIX, result].join('');
} else {
return null;
}
}
if (field.type === GraphQLList) {
if (result) {
return result.map((key) => [process.env.AWS_S3_PREFIX, key].join(''));
} else {
return [];
}
}
};
}
}
module.exports = S3Prefix;