2016-11-08 9 views
2

他のスキーマへの参照が正しくないことがわかりません。 は私がajvを使用して、次の二つのスキーマエラー:参照error.jsonをIDから解決できません。#

まずスキーマ間違った-email.jsonあります

{ 
    "title": "Не корректный email", 
    "properties": { 
    "status": { 
     "description": "Статус операции", 
     "type": "integer", 
     "enum": [68] 
    }, 
    "error": { 
     "$ref":"error.json" 
    } 
    }, 
    "required":["status", "error"], 
    "additionalProperties": false 
} 

セカンドスキーマerror.json:走行試験の後、私はこのエラーを取得

{ 
    "type": "array", 
    "minItems": 2, 
    "items": { 
    "type": "object", 
    "properties": { 
     "description_ru": { 
     "description": "Информация об ошибке на русском языке", 
     "type": "string" 
     }, 
     "description_en": { 
     "description": "Информация об ошибке на английском языке", 
     "type": "string" 
     } 
    }, 
    "additionalProperties": false 
    } 
} 

Error: can't resolve reference error.json from id # Mine validation method:

var valid = ajv.validate(require("../schema/login/incorrect-email.json"), data); 

私は、ローカルのスキーマerror.jsonへの参照ではなく、リモートサーバーとなど を必要とする私に教えてください、私はあなたがすることができるスキーマファイルを変更せずにAJV

+1

refに 'ids'を割り当てる必要があります。このhttps://github.com/epoberezkin/ajv/issues/47とhttps://github.com/epoberezkin/ajv/issues/185を参照してください – pratikpawar

答えて

1

で正しい解析のために、このスキーマと$ REFにIDを追加できる場所:

ajv.addSchema(require('./incorrect-email.json', 'incorrect-email.json')); 
ajv.addSchema(require('./error.json'), 'error.json'); 
var valid = ajv.validate('incorrect-email.json', data); 

スキーマIDをaddSchema呼び出しで指定する代わりに、スキーマ自体でID属性を指定できます(推奨)。いずれの場合でも、デフォルトでは、AjvはスキーマをロードするためにIOを使用しません。スキーマはaddSchemaメソッドで事前にロードする必要があります。 compileAsyncメソッドを使用するときは、スキーマを動的に(および非同期に)読み込むことができますが、ロードメカニズムを自分で指定する必要があります(fs、httpなど)。

+0

ありがとう、それは仕事です! 1つの質問、添付ファイルが2つ以上の場合、すべての組み込み回路をバイパスするハンドラを作成する必要があります。 私のenglieshに申し訳ありません。 –

+0

IDが異なる限り、すべてのスキーマをAjvインスタンスに追加できます – esp

関連する問題