如何使用 AJV 创建自定义错误消息?

Posted

技术标签:

【中文标题】如何使用 AJV 创建自定义错误消息?【英文标题】:How to create custom error messages using AJV? 【发布时间】:2021-07-04 09:02:47 【问题描述】:

我正在尝试将自定义错误消息添加到我的应用程序输入字段,但是当我尝试收到此错误时:

错误:严格模式:未知关键字:“errorMessage”

这是代码。

文件一:

import Ajv,  JSONSchemaType  from 'ajv'
import addFormats from 'ajv-formats'

const ajv = new Ajv( allErrors: true, $data: true )

addFormats(ajv)

export const emailSchema: JSONSchemaType<string> = 
  type: 'string',
  minLength: 1,
  format: 'email',
//this is whats causing the error
  errorMessage: 
    minLength: 'This field cannot be empty.',
    format: 'Must be a valid email address.',
  ,


export const validateEmail = (value: string) => 
  return 
    isValid: emailValidator(value),
    error: emailValidator.errors ? emailValidator.errors[0]?.message : '',
  

文件二:

import Ajv,  JSONSchemaType  from 'ajv'
import  LoginCredentials  from './types'
import addFormats from 'ajv-formats'
import 
  emailSchema,
  passwordSchema,
  recaptchaTockenSchema,
 from '../../utils/validation/auth-validation'
import  getFormattedErrors  from '../../utils/validation/formatter'

const ajv = new Ajv( allErrors: true, $data: true )

addFormats(ajv)

const credentialsSchema: JSONSchemaType<LoginCredentials> = 
  type: 'object',
  properties: 
    emailAddress: emailSchema,
    password: passwordSchema,
    recaptchaToken: recaptchaTockenSchema,
  ,
  required: ['emailAddress', 'password', 'recaptchaToken'],
  additionalProperties: false,


const credentialsValidator = ajv.compile(credentialsSchema)

export const validateCredentials = (credentials: LoginCredentials) => 
  return 
    isValid: credentialsValidator(credentials),
    errors: getFormattedErrors(credentialsValidator.errors),
  

我想要一条不同的消息,具体取决于错误,例如 minLength 或格式,但我想定义这条错误消息的内容,我该怎么做?

【问题讨论】:

【参考方案1】:

您需要单独使用“ajv-errors”库。类似的东西:

import Ajv from 'ajv';
import addFormats from 'ajv-formats'
import ajvErrors from 'ajv-errors';

const ajv = new Ajv( allErrors: true, $data: true );
addFormats(ajv);
ajvErrors(ajv);

【讨论】:

谢谢你!我已经找了好几天了。

以上是关于如何使用 AJV 创建自定义错误消息?的主要内容,如果未能解决你的问题,请参考以下文章

最新的 AJV 和 ajv-formats 必须在 React 中被打破

当我导航到其他路由器页面时,如何清除由错误边界创建的自定义消息

使用模型表单创建自定义错误消息

如何创建自定义 FluentAssertion 错误消息?

如何根据 Angular 2 中的自定义验证规则显示错误消息?

如何使用 GraphQLError 自定义消息?