⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

自定义标量 + 声明式输入校验器模式

超越简单的 String/Int 类型,教你创建带有内置业务校验的自定义标量(如 Email、PhoneNumber、ColorHex),并在解析输入时自动验证,无需在 Resolver 中写 if-else。 · 难度:入门 · +10XP

自定义标量 + 声明式输入校验器模式

GraphQL 允许定义自定义标量,但多数教程只停留在序列化/反序列化。本课深入如何为自定义标量附加校验逻辑,例如:scalar Email @specifiedBy(url: "https://tools.ietf.org/html/rfc5321"),同时在解析器中使用正则或第三方库校验。更进一步,我们将展示如何建立一个可复用的 Validator 类,在 parseValueparseLiteral 中抛出 GraphQLError,并附带友好的错误消息。同时结合 @constraint 指令完成声明式校验。

const EmailScalar = new GraphQLScalarType({
  name: 'Email',
  description: 'A valid email address',
  serialize: (v) => v,
  parseValue: (v) => {
    if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v)) {
      throw new GraphQLError('Invalid email format');
    }
    return v;
  },
  parseLiteral: (ast) => {
    if (ast.kind !== Kind.STRING) throw new GraphQLError('Email must be string');
    return EmailScalar.parseValue(ast.value);
  },
});
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 147 篇
0 完成
🔥 0