在添加或修改数据时,验证用户输入很重要。例如,我们可能需要确保字段的值始终不为空。我们可以用 GraphQL 中的! (non-nullable) 类型标记来执行此类验证。
使用!类型标签的语法如下所示-
type TypeName { field1:String!, field2:String!, field3:Int! }
上面的语法确保所有字段都不为空。
如果要实施其他规则,如检查字符串的长度或检查数字是否在给定范围内,则可以定义自定义验证器,定制验证逻辑将成为解析器函数的一部分。
让无涯教程创建一个具有基本验证的注册表单。该表格将包含电子邮件,名字和密码字段。
创建一个名为 validation-app 的文件夹。从终端将目录更改为Validation-app。请按照"环境设置"一章中介绍的步骤3至5进行操作。
在项目文件夹 validation-app 中添加 schema.graphql 文件,并添加以下代码-
type Query { greeting:String } type Mutation { signUp(input:SignUpInput):String } input SignUpInput { email:String!, password:String!, firstName:String! }
注意-无涯教程可以使用输入类型SignUpInput来减少signUp函数中的参数数量。因此,signUp函数仅采用SignUpInput类型的一个参数。
在项目文件夹中创建文件 resolvers.js 并添加以下代码-
const Query={ greeting:() => "Hello" } const Mutation ={ signUp:(root,args,context,info) => { const {email,firstName,password}=args.input; const emailExpression=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; const isValidEmail= emailExpression.test(String(email).toLowerCase()) if(!isValidEmail) throw new Error("email not in proper format") if(firstName.length > 15) throw new Error("firstName should be less than 15 characters") if(password.length < 8 ) throw new Error("password should be minimum 8 characters") return "success"; } } module.exports={Query,Mutation}
解析程序函数signUp接受参数电子邮件,密码和名字。这些将通过输入变量传递,以便可以通过args.input访问。
创建一个server.js文件。请参阅环境设置一章中的步骤8。在终端中执行命令 npm start 。服务器将启动并在9000端口上运行。在这里,将使用GraphiQL作为客户端来测试应用程序。
打开浏览器并输入URL http://localhost:9000/graphiql 。在编辑器中键入以下查询-
mutation doSignUp($input:SignUpInput) { signUp(input:$input) }
由于注册函数的输入是复杂类型,因此需要在graphiql中使用查询变量。为此需要首先给查询起一个名字并将其命名为doSignUp,$input是查询变量。
必须在graphiql的查询变量选项卡中输入以下查询变量-
{ "input":{ "email": "abc@abc", "firstName": "kannan", "password": "pass@1234" } }
errors数组包含验证错误的详细信息,如下所示-
{ "data": { "signUp": null }, "errors": [ { "message": "email not in proper format", "locations": [ { "line": 2, "column": 4 } ], "path": [ "signUp" ] } ] }
无涯教程必须为每个字段输入适当的输入,如下所示-
{ "input":{ "email": "abc@abc.com", "firstName": "kannan", "password": "pass@1234" } }
响应如下-
链接:https://www.learnfk.comhttps://www.learnfk.com/graphql/graphql-validation.html
来源:LearnFk无涯教程网
{ "data": { "signUp": "success" } }
在这里,在下面的查询中,没有分配任何密码。
{ "input":{ "email": "abc@abc.com", "firstName": "kannan" } }
如果未提供必填字段,则qraphql服务器将显示以下错误-
{ "errors": [ { "message": "Variable\"$input\" got invalid value {\"email\":\"abc@abc.com\",\"firstName\":\"kannan\"}; Field value.password of required type String! was not provided.", "locations": [ { "line": 1, "column": 19 } ] } ] }
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)