2017-02-18 73 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”:“一些文本”。

我曾尝试包括:typeof (!newDoc[field]) === 'object' 内的if语句,但无法获得的JavaScript设定了正确

我肯定的回答很简单。

回答

0

我已经找到了这个问题的答案here。(在 增加验证部分的方式约2 /三分之二下来的文章。(罗伯特·科瓦尔斯基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 }" 
}