如何解决Apollo GraphQL Server中标量的指令
我在架构中将Date定义为标量。
是否只有一种方法可以定义有关法律价值的规则?
我可能会在FIELD_DEFINITION上定义一个指令,并将其应用于这种类型的每个字段。但是,我想做一次。有可能吗?
这是我的代码。 CitizenshipCode实际上是一个字符串,限于值“ us”,“ uk”,“ de”等。我想以集中方式实现验证,而不是向该类型的每个字段添加指令:
scalar CitizenshipCode # is it possible to implement the validation here?
type Client {
id: ID!
name: String
citizenship: CitizenshipCode # instead of here...
# other atts
}
type User {
id: ID!
email: String
citizenship: CitizenshipCode # ... and here
# other atts
}
解决方法
也许您可以在代码中使用枚举类型或使用自定义架构:
const { ApolloServer,gql,SchemaDirectiveVisitor } = require('apollo-server');
const { GraphQLScalarType,Kind } = require('graphql');
const validCountryCodes = [ "US","UK","DE"];
const citizenshipCodeScalar = new GraphQLScalarType({
name: 'CitizenshipCode',description: 'Allowed citizen ship codes',serialize(value) {
return validCountryCodes.includes(value) ? value : "INVALID COUNTRY";
},parseValue(value) {
return validCountryCodes.includes(value) ? value : null;
},parseLiteral(ast) {
return ast.kind === Kind.STRING ? ast.value : null;
}
});
const typeDefs = gql `
scalar CitizenshipCode
type Client {
id: ID
name: String
citizenship: CitizenshipCode
}
type User {
id: Int
email: String
citizenship: CitizenshipCode
}
type Query {
clients: [Client]
users: [User]
}
`;
const resolvers = {
Query: {
clients: () => clients,users: () => users
},CitizenshipCode: citizenshipCodeScalar
};
const client = [{
id: 'client1',name: 'The Awakening',citizenship: 'US'
},{
id: 'client2',title: 'City of Glass',citizenship: 'CA',},];
const users = [{
id: 1,email: 'test1@test.com',citizenship: 'UK',{
id: 2,email: 'test2@test.com',citizenship: 'DE',];
const server = new ApolloServer({
typeDefs,resolvers
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。