GraphQL教程

GraphQL 验证

在添加或修改数据时,验证用户输入很重要。例如,我们可能需要确保某个字段的值始终不为 null。我们可以使用 ! (不可为空) 在 GraphQL 中键入标记以执行此类验证。
使用 ! 类型标记的语法如下-
type TypeName {
   field1:String!,
   field2:String!,
   field3:Int!
}
以上语法确保所有字段都不为空。
如果我们想实现额外的规则,比如检查字符串的长度或检查数字是否在给定范围内,我们可以定义自定义验证器。自定义验证逻辑将成为解析器功能的一部分。让我们通过一个例子来理解这一点。

插图-实现自定义验证器

让我们创建一个带有基本验证的注册表单。表单将包含电子邮件、名字和密码字段。

步骤 1-下载并安装项目所需的依赖项

创建一个名为 validation-app 的文件夹。从终端将目录更改为validation-app。按照"环境设置"一章中说明的步骤 3 到 5 进行操作。

第 2 步-创建架构

在项目文件夹 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 类型的参数。

第 3 步-创建解析器

在项目文件夹中创建一个文件 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。

第 4 步-运行应用程序

创建一个 server.js 文件。请参阅环境设置章节中的步骤 8、在终端中执行命令 npm start。服务器将在 9000 端口上启动并运行。在这里,我们将使用 GraphiQL 作为客户端来测试应用程序。
打开浏览器并输入 URL http://localhost:9000/graphiql。在编辑器中输入以下查询-
mutation doSignUp($input:SignUpInput) {
   signUp(input:$input)
}
由于signup函数的输入是复杂类型,我们需要在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"
   }
}
响应如下-
{
   "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
            }
         ]
      }
   ]
}
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4