2016-11-08 2 views
2

다른 스키마에 대한 참조가 정확하지 않습니다. 나는 ajv을 사용하고있는 다음 두 스키마오류 : id에서 참조 error.json을 확인할 수 없습니다. #

먼저 스키마 잘못된-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); 

나 내가 당신이 할 수있는 변경 스키마 파일없이 AJV

+1

ref에 'ids'를 지정해야합니다. 읽기 https://github.com/epoberezkin/ajv/issues/47 and https://github.com/epoberezkin/ajv/issues/185 – pratikpawar

답변

1

와 올바른 구문 분석이 스키마와 $ 심판에 ID를 추가 할 수있는 , 제발 말해 아니라 원격 서버 등 지역 스키마 error.json에 대한 참조가 필요 :

addSchema 호출에서 스키마 ID를 지정하는 대신 스키마 자체에 ID 속성을 지정할 수 있습니다 (권장 사항). 어쨌든 Ajv는 기본적으로 스키마를로드하는 데 IO를 사용하지 않으므로 스키마에 addSchema 메소드를 미리로드해야합니다. compileAsync 메서드를 사용할 때 동적으로 (그리고 비동기 적으로) 스키마를로드 할 수 있지만로드 메커니즘을 직접 지정해야합니다 (fs, http 등).

+0

고마워, 그게 다야! 하나의 질문, 첨부 파일이 두 개 이상이면, 임베디드 회로를 모두 우회하는 처리기를 작성해야합니다. 내 englishh 죄송합니다. –

+0

ID가 다른 한 모든 스키마를 Ajv 인스턴스에 추가 할 수 있습니다 – esp