新文档验证:CouchDB

New Document Validation: 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'在下面的代码中不是'recognised',虽然代码是 有效:

{ 
  "_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\"); 
 } 
}" 
} 

回复是:

"Save failed: Document must have a abc.def"

我的新文档符合有效条目的条件并包含 "abc.def":"some text".

我试过包括:typeof (!newDoc[field]) === 'object' 在 if 语句中但无法正确设置 javascript

我相信答案很简单。

我找到了这个问题的答案here。(在 在文章的 2/3 处添加验证部分。(作者:Robert Kowalski,2014 年 8 月 28 日。))

改编后的代码是:(希望我已经更正了它)

{
"_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  }"
}