2017-02-18 14 views
0

은 누군가가 나에게이 새 문서 확인 기능으로 작동하는 이유에 대한 포인터 줄 수 없습니다 : 코드 있지만,새 문서 확인 : CouchDB를

{ 
    "_id": "_design/must_have_field_verifier", 
    "_rev": "14-7aa573a99ec8cb007edfe6c8dd72ba15", 
    "validate_doc_update": "function(newDoc, oldDoc, userCtx) { 
function require(field, message) { 
message = message || \"Document must have a \" + field; 
    if (!newDoc[field]) throw({forbidden : message}); 
}; 
{ 
require(\"abc\"); 
} 
}" 
} 

하지만 'abc.def' 아래의 코드를 '인식'되지 않습니다 유효 :

{ 
    "_id": "_design/must_have_field_verifier", 
    "_rev": "14-7aa573a99ec8cb007edfe6c8dd72ba15", 
    "validate_doc_update": "function(newDoc, oldDoc, userCtx) { 
function require(field, message) { 
message = message || \"Document must have a \" + field; 
    if (!newDoc[field]) throw({forbidden : message}); 
}; 
{ 
require(\"abc.def\"); 
} 
}" 
} 

의 응답은 다음과 같습니다

는 "저장 실패 : 문서가 abc.def이 있어야합니다"

내 새 문서는 유효한 항목으로 간주되며 "abc.def": "some text"를 포함합니다.

내가 포함 시도 : 내부 typeof (!newDoc[field]) === 'object' 문하지만 자바 스크립트가 제대로

나는 대답은 간단 하나입니다 확신 착수 얻을 수 없습니다.

답변

0

나는이 질문 here에 대한 답을 발견했다.합니다 ( 추가 검증 섹션에서 길의 약 2/2/3을 기사 아래. (로버트 코왈 스키에 의해 8 월 28 일 2014))

적응 된 코드 입니다 : (올바르게 수정했으면합니다)

{ 
"_id": "_design/verifier", 
"_rev": "5-33f3ff3d650bf1594a9357af58153232", 
"validate_doc_update": "function (newDoc, oldDoc, userCtx, secObj) {\n if  (newDoc.type == \"xyz\"){\n if (newDoc._deleted === true) {\n  return;\n }\n if (!newDoc.abc) {\n  throw({forbidden: \"Document must have an abc.\"});\n }\n if (!newDoc.def) {\n  throw({forbidden: \"Document must have a def.\"});\n }\n if (!newDoc.ghi) {\n  throw({forbidden: \"Document must have a ghi.\"});\n }\n if (!newDoc.jkl.mno) {\n  throw({forbidden: \"Document must have a jkl mno.\"});\n }\n if (!newDoc.pqr.stu) {\n  throw({forbidden: \"Document must have a pqr stu.\"});\n }\n if (!newDoc.vwx.yyy) {\n  throw({forbidden: \"Document must have a vwx yyy.\"});\n }\n }\n }" 
}