【问题标题】:How to create custom error messages using AJV?如何使用 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 或格式,但我想定义这条错误消息的内容,我该怎么做?

【问题讨论】:

    标签: javascript json reactjs typescript ajv


    【解决方案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);
    

    【讨论】:

    • 谢谢你!我已经找了好几天了。
    猜你喜欢
    • 2018-08-19
    • 2018-05-17
    • 1970-01-01
    • 2021-05-03
    • 2021-10-29
    • 2014-04-01
    • 1970-01-01
    • 2015-09-22
    • 2011-03-27
    相关资源
    最近更新 更多