CouchDB设计文档…保存失败:表达式不求值为函数
所以我试图在CouchDB设计文档…保存失败:表达式不求值为函数,couchdb,couchdb-2.0,Couchdb,Couchdb 2.0,所以我试图在CouchDB中创建一个设计文档,但有一个小问题。这是一个机器人团队侦察系统。设计文档应该检查用户是否具有角色“marea”。如果他们这样做,则允许他们将文档输入数据库。然后,设计文档应该取JSON字段“points”,如果“team”字段匹配,则取其平均值。平均值应合并回数据库。如果用户没有“marea”角色,则应限制其输入任何文档。请让我知道你对下面代码的看法,我也希望得到一些关于我收到的错误消息的建议。我可以很好地保存设计文档,但是它的功能有点不确定。它阻止用户创建具有“poi
CouchDB
中创建一个设计文档,但有一个小问题。这是一个机器人团队侦察系统。设计文档应该检查用户是否具有角色“marea”。如果他们这样做,则允许他们将文档输入数据库。然后,设计文档应该取JSON字段“points”,如果“team”字段匹配,则取其平均值。平均值应合并回数据库。如果用户没有“marea”角色,则应限制其输入任何文档。请让我知道你对下面代码的看法,我也希望得到一些关于我收到的错误消息的建议。我可以很好地保存设计文档,但是它的功能有点不确定。它阻止用户创建具有“points”值的新文档,即使该用户具有“marea”角色。确切的错误消息是:
Save failed: Expression does not eval to a function. (function(newDoc, oldDoc, userCtx, secObj) { if ((userCtx.roles.indexOf("2018marea") !==
-1) || (userCtx.name == oldDoc.name)) { if (!doc) { if ("id" in req && req["id"]) { return [{"_id": req["id"]}, "New Doc"] emit(null, "points") var pointsArray = ["points"], thisTotal = 0, thisAverage = 0; for(var i = 0;i < pointsArray.length; i++) { thisTotal+ = pointsArray[i]; } thisAverage = (thisTotal/pointsArray.length); } return [null, "Empty Database."] } doc["New Doc"] = thisAverage; doc["edited_by"] = req["userCtx"]["name"] return [doc, "Edited Data."] } else { return [null, "Cannot Overwrite Data"] } } )
保存失败:表达式不求值到函数。函数(newDoc,oldDoc,userCtx,secObj){if((userCtx.roles.indexOf(“2018marea”)==
-1) | |(userCtx.name==oldDoc.name)){if(!doc){if(“id”在req中和req[“id”]){return[{“\u id”:req[“id”],“New doc”]emit(null,“points”)var pointsArray=[“points”],thisTotal=0,thisAverage=0;for(var i=0;i
如何解决此问题,以便设计文档执行其预期功能
{
"_id": "_design/marea",
"language": "javascript",
"validate_doc_update": "function(newDoc, oldDoc, userCtx, secObj) {\r\n\r\n if ((userCtx.roles.indexOf(\"2018marea\") !== -1) || (userCtx.name == oldDoc.name)) { \r\n \r\n if (!doc) {\r\n \r\n if (\"id\" in req && req[\"id\"]) {\r\n \r\n return [{\"_id\": req[\"id\"]}, \"New Doc\"] \r\n emit(null, \"points\")\r\n var pointsArray = [\"points\"], thisTotal = 0, thisAverage = 0;\r\n for(var i = 0;i < pointsArray.length; i++) {\r\n \r\n thisTotal+ = pointsArray[i];\r\n \r\n }\r\n \r\n thisAverage = (thisTotal/pointsArray.length); \r\n \r\n }\r\n \r\n return [null, \"Empty Database.\"]\r\n \r\n }\r\n \r\n doc[\"New Doc\"] = thisAverage;\r\n doc[\"edited_by\"] = req[\"userCtx\"][\"name\"] \r\n return [doc, \"Edited Data.\"] \r\n\r\n } else {\r\n \r\n return [null, \"Cannot Overwrite Data\"]\r\n \r\n }\r\n } "
}
{
“_id”:“_设计/marea”,
“语言”:“javascript”,
“验证文档更新”:“函数(newDoc,oldDoc,userCtx,secObj){\r\n\r\n如果((userCtx.roles.indexOf(\'2018marea\”)==-1){124;(userCtx.name==oldDoc.name)){\r\n\r\n如果(!doc){\r\n\r\n如果(\'id\'in-req和&req[\'id\\\']){\r\n\r\n\r\n返回[\'u-id\\':req[\'id\\'id\'New doc\r\n emit(null,\“points\”)\r\n var pointsArray=[\“points\”],thisTotal=0,thisAverage=0;\r\n for(var i=0;i
错误很明显:您的函数无效
{thisTotal+=pointsArray[i];}
;
emit(空,“点”);
var pointsArray
这应该更好地发挥作用:
function(newDoc, oldDoc, userCtx, secObj) {
if ((userCtx.roles.indexOf("2018marea") !== -1) || (userCtx.name == oldDoc.name)) {
if (!doc) {
if ("id" in req && req["id"]) {
return [{
"_id": req["id"]
}, "New Doc"];emit(null, "points"); var pointsArray = ["points"],
thisTotal = 0,
thisAverage = 0;
for (var i = 0; i < pointsArray.length; i++) {
thisTotal += pointsArray[i];
}
thisAverage = (thisTotal / pointsArray.length);
}
return [null, "Empty Database."]
}
doc["New Doc"] = thisAverage;
doc["edited_by"] = req["userCtx"]["name"]
return [doc, "Edited Data."]
} else {
return [null, "Cannot Overwrite Data"]
}
}
函数(newDoc、oldDoc、userCtx、secObj){
if((userCtx.roles.indexOf(“2018marea”)!==-1)| |(userCtx.name==oldDoc.name)){
如果(!doc){
如果(请求中的“id”&&req[“id”]){
返回[{
“_id”:请求[“id”]
},“新文档”];发射(空,“点”);变量pointsArray=[“点”],
总计=0,
这个平均值=0;
对于(var i=0;i