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

标签 javascript json reactjs typescript ajv

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

Error: strict mode: unknown keyword: "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 或格式,但我想定义此错误消息的内容,我该怎么做?

最佳答案

您需要单独使用“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);

关于javascript - 如何使用 AJV 创建自定义错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67004894/

相关文章:

javascript - 当我使用 NavigatorIOS 时,为什么初始 View 是空的?

reactjs - React Maximum update depth exceeded 错误仅在测试中由useEffect引起

javascript - sails js : How can I define two MySQL connections to two different databases in a single model in Sails js?

xml - XSLT替换变量中的双引号

ruby-on-rails - Ruby - 从 Podfile.lock 解析依赖项数据

java - 如何在 HtmlUnit 中过滤响应类型?

reactjs - 使用 useContext 钩子(Hook)时如何访问提供者值

javascript - 创建 iframe 和发布参数

javascript - 如何让菜单边栏消失并使用变换调整内容

javascript - React - 窗口上的 beforeunload 事件不会触发