ajv-validator / ajv-validator/ajv-errors

Errors for custom keywords / Sequence of initialization

未关闭
#32 1 条评论 7 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
TypeScript
星标
289
派生
21
PR 合并指标
30 天内没有已合并 PR

描述

Hello,

First of all, thank you for this library, and also for the main `ajv` library! :) I would just like to post this in order to save other people a few hours.

I discovered yesterday that it is important to add your keywords to your ajv instance *before* adding this `ajv-errors` plugin. Otherwise, customized error messages for your custom keywords will not appear, as your validators have not run by the time this plugin goes looking for custom error messages.

Example - if you init this plugin before adding your keywords:

```javascript
const ajv = require('ajv')
const instance = new ajv({
allErrors: true,
jsonPointers: true
})

require('ajv-errors')(instance)

instance.addKeyword('testError', {
validate: () => false
})

const validator = instance.compile({
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://workflow.rlscplatform.net/PPB_ASSAY",
"type": "object",
"properties": {
"test": {
"type": "string",
"testError": true,
"errorMessage": {
"testError": "This is my custom error message"
}
}
}
})

validator({
test: "test"
})

console.log(validator.errors)
```

Outputs this:

```
[ { keyword: 'testError',
dataPath: '/test',
schemaPath: '#/properties/test/testError',
params: { keyword: 'testError' },
message: 'should pass "testError" keyword validation' } ]
```

But if you just put ajv-errors *after* your addKeyword:

```
instance.addKeyword('testError', {
validate: () => false
})

require('ajv-errors')(instance)
```

The output becomes:

```
[ { keyword: 'errorMessage',
dataPath: '/test',
schemaPath: '#/properties/test/errorMessage',
params: { errors: [Array] },
message: 'This is my custom error message' } ]
```

Regards,
TJ

贡献指南

这个仓库没有索引到贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。