ajv-validator / ajv-validator/ajv-errors

Errors for custom keywords / Sequence of initialization

オープン
#32 コメント 1 件 リアクション 7 件 担当者 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 を短くまとめたダイジェスト。