教程 > graphql 教程 > 阅读:217

graphql validation 验证用户输入——迹忆客-ag捕鱼王app官网

添加或修改数据时,验证用户输入很重要。例如,我们可能需要确保某个字段的值始终不为空。我们可以使用graphql 中的(不可为空的)类型标记 ! 来执行此类验证。

使用!的语法 类型标记如下所示

type typename {
   field1:string!,
   field2:string!,
   field3:int!
}

上述语法确保所有字段都不为空。

如果我们想实现额外的规则,比如检查字符串的长度或检查数字是否在给定范围内,我们可以定义自定义验证器。自定义验证逻辑将成为解析器功能的一部分。让我们通过一个例子来理解这一点。

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

一、下载并安装项目所需的依赖项

创建一个名为validation-app的文件夹 。从终端将目录更改为 validation-app。按照开发环境的搭建中说明的步骤 3 到 5 完成下载和安装过程。

二、 创建schema

在项目文件夹validation-app中添加schema.graphql文件 并添加以下代码

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并添加以下代码

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 接受参数 email、password 和 firstname。这些将通过输入变量传递,以便可以通过 args.input 访问它。

四、运行应用程序

创建 server.js 文件并参考开发环境的搭建章节中的步骤 8。下一步是在终端中执行命令 npm start。服务器将在 9000 端口上启动并运行。在这里,我们使用 graphiql 作为客户端来测试应用程序。打开浏览器并输入 url,

在编辑器中输入以下查询

mutation dosignup($input:signupinput) {
   signup(input:$input)
}

由于注册函数的输入是复杂类型,我们需要在 graphiql 中使用查询变量。为此,我们需要首先为查询命名并称之为 dosignup,$input 是一个查询变量。

必须在 graphiql 的查询变量选项卡中输入以下查询变量

{
   "input":{
      "email": "abc@abc",
      "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
            }
         ]
      }
   ]
}

查看笔记

扫码一下
查看教程更方便
网站地图