2017-04-05 3 views
0

デフォルトのエラーと同様に、すべてのエラーを返すようにこのジョイの検証を行うことはできません。だからここjoi:カスタムエラーは返されず、abortEarlyはfalseに設定されます

私はフィールドごとに個別のカスタムエラーを設定しています。そして、

const schema = Joi.object().keys({ 
    a: Joi.string().error(new Error('must be string')), 
    b: Joi.number().error(new Error('must be number')) 
}); 

をabortEarlyをfalseに設定して検証するときに、それだけで、それが遭遇する最初のエラーを返します。エラーが返さ

Joi.validate({a: 1, b: false}, schema, {abortEarly: false}) 

は、この、

{ error: [Error: must be string], value: { a: 1, b: false }} 

それはいくつかの方法で、すべてのエラーを返すべきであるようなものです。

私はabortEarlyを間違って使用していますか、またはすべてのカスタムエラーを返すためにプロセスを実行する必要がありますか?すべての応答に事前に感謝します。

答えて

0

私は答えを見つけたと思います。私のjoiライブラリは更新されていないので、10.2.xから10.4.1に上がった。以前のバージョンで試したときに動作しなかったドキュメントには、私が行った解決策を含めていくつかの機能がありました。

私はこのパターンを使用してみました、それが動作します:

const schema = Joi.object().keys({ 
    a: Joi.string().error(() => 'must be string'), 
    b: Joi.number().error(() => 'must be number') 
}); 

ので、同じように:

{ [ValidationError: child "a" fails because [must be string]. child "b" fails because [must be number]] 
    isJoi: true, 
    name: 'ValidationError', 
    details: 
    [ { message: '"a" must be a string', 
     path: 'a', 
     type: 'string.base', 
     context: [Object] }, 
    { message: '"b" must be a number', 
     path: 'b', 
     type: 'number.base', 
     context: [Object] } ], 
    _object: { a: 1, b: false }, 
    annotate: [Function] } 

その後、私はちょうどすべてのエラーメッセージを取得し、それを処理するためにerror.messageを解析します。

'child "a" fails because [must be string]. child "b" fails because [must be number]' 
関連する問題