xpe*_*int 23 validation error-handling graphql
假设您有一个将数据发布到API服务器的表单.API服务器验证输入并返回JSON对象.如果输入无效,则返回如下所示的错误对象.
{errors: {field1: "is required"}}
Run Code Online (Sandbox Code Playgroud)
使用GraphQL时,我们如何处理和提供这些错误?应该如何以及在何处实施数据验证(应该是GraphQL的一部分还是应该在每个解析函数中)?
Kon*_*kus 18
使用resolve
方法内的验证逻辑,您可以完全控制生成的用户错误.这是一个例子:
// data/mutations/createUser.js
import {
GraphQLObjectType as ObjectType,
GraphQLNonNull as NonNull,
GraphQLList as List,
GraphQLString as StringType
} from 'graphql';
import validator from 'validator';
import UserType from '../types/UserType';
export default {
type: new ObjectType({
name: 'CreateUserResult',
fields: {
user: { type: UserType },
errors: { type: new NonNull(new List(StringType)) }
}
}),
args: {
email: { type: new NonNull(StringType) },
password: { type: new NonNull(StringType) }
},
resolve(_, { email, password }) {
let user = null;
let errors = [];
if (validator.isNull(email)) {
errors.push(...['email', 'The email filed must not be empty.']);
} else if (!validator.isLength(email, { max: 100})) {
errors.push(...['email', 'The email must be at a max 100 characters long.']);
}
// etc.
return { user, errors };
}
};
Run Code Online (Sandbox Code Playgroud)
请参阅我关于此主题的博客文章 - GraphQL Mutations中的验证和用户错误
或者,type UserErrorType { key: String!, message: String! }
在编译要返回给调用者的用户错误列表时,可以使用create 而不是plain字符串.
mutation {
createUser(email: "hello@tarkus.me", password: "Passw0rd") {
user { id, email },
errors { key, message }
}
}
Run Code Online (Sandbox Code Playgroud)
{
data: {
user: null,
errors: [
{ key: '', message: 'Failed to create a new user account.' },
{ key: 'email', message: 'User with this email already exists.' }
]
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8636 次 |
最近记录: |