gpt4 book ai didi

javascript - 使用 GraphQL 在各个字段上设置解析器

转载 作者:行者123 更新时间:2023-12-03 01:19:24 26 4
gpt4 key购买 nike

我想在返回字符串的单个字段上设置解析器。

对于这个例子。我想采用 title 属性,并将其设为 .toUpperCase

架构

type Product {
title(uppercase:Boolean!): String!
}
type Query {
products: [Product]
}

解析器

Query: {
products: () => [{title:'foo'}],
products.title: (stringToRtn, { action }) => {
return action ? stringToRtn.toUpperCase : stringToRtn
}
}

最佳答案

解决方案如下:

const resolvers = {
Product: {
title: product => {
return product.title.toUpperCase();
}
},
Query: {
products: () => [{title:'foo'}]
}
};

如果您使用 TypeScript,请使用这些 typeDefs :

type Product {
title: String!
}
type Query {
products: [Product]
}

另一种方法是使用自定义指令,如“@upperCase”,但它太复杂了。

TypeScript更新指令方式

删除: GraphQLField<any, any>如果您不使用 TypeScript。

@uppercase指令执行:

import { SchemaDirectiveVisitor } from 'graphql-tools';
import { GraphQLField, defaultFieldResolver } from 'graphql';

class UppercaseDirective extends SchemaDirectiveVisitor {
public visitFieldDefinition(field: GraphQLField<any, any>) {
const { resolve = defaultFieldResolver } = field;
field.resolve = async function resolver(...args) {
const result = resolve.apply(this, args);
if (typeof result === 'string') {
return result.toUpperCase();
}
return result;
};
}
}

export { UppercaseDirective };

如果您使用 TypeScript,请使用这些 typeDefs :

const typeDefs: string = `
enum Status {
SOLD_OUT
NO_STOCK
OUT_OF_DATE @deprecated(reason: "This value is deprecated")
}

type Book {
id: ID!
title: String @uppercase
author: String
status: Status
name: String @deprecated(reason: "Use title instead")
}

type Query {
books: [Book]!
bookByStatus(status: Status!): [Book]!
}
`;

schema :

(如果您不使用 TypeScript,请删除 : GraphQLSchema。)

const schema: GraphQLSchema = makeExecutableSchema({
typeDefs,
resolvers,
schemaDirectives: {
deprecated: DeprecatedDirective,
uppercase: UppercaseDirective
}
});

这里是 source code using TypeScript 的链接

关于javascript - 使用 GraphQL 在各个字段上设置解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51831796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com