2017-02-18 191 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 }" 
}