人们如何通过Couchdb中的更新处理程序添加额外字段?我想添加作者(我有一个验证函数来检查用户是否已登录),并在通过更新处理程序创建新的文档时添加了id。
作者姓名来自req.userCtx.Name,我发送的数据是在req.body中,我使用req.uuid作为_id
"updates": {
"new": "function(doc,req) { var message = req.uuid; return [ { _id : req.uuid, "author" : req.userCtx.name, data : req.body}, message]}"
}
数据已通过curl POST发送
$ cat test.json
{"data" : {"name" : "myname","dob" : "myDOB"}}
这是数据通过更新处理程序查看的方式
{"_id":"a018fed749d64f5db754b39af803a88f","_rev":"1-939793c36d2bfe4de86f808fab056959","author":"admin","data":"{\"name\" : \"myname\",\"dob\" : \"myDOB\"}"}
如果我执行标准POST(不是通过更新处理程序),它看起来像这样..
{"_id":"a018fed749d64f5db754b39af803b621","_rev":"1-e44f0471e1df1018439fee3681b49547","data":{"name":"myname","dob":"myDOB"}}
我做错了什么?
编辑
典型的花了几个小时看,然后发布问题,我找到了解决方案。
这有助于 - http://grokbase.com/t/couchdb/user/10cbesx3zz/how-should-i-handle-json-parsing-in-update-handler
{ "new": "function(doc,req) { var data = JSON.parse(req.body); data['_id'] = req.uuid;data.author = req.userCtx.name; message = req.uuid; return [ data, message]}" }
doc现在有id和作者..
{"_id":"a018fed749d64f5db754b39af80406b7","_rev":"1-c486b02d6f320eb15e6115e71b3f02cc","data":{"name":"myname","dob":"myDOB"},"author":"admin"}
答案 0 :(得分:1)
典型的花了几个小时看,然后发布问题,我找到了解决方案。
来自 - http://grokbase.com/t/couchdb/user/10cbesx3zz/how-should-i-handle-json-parsing-in-update-handler
{
"new": "function(doc,req) {
var data = **JSON.parse(req.body)**;
data['_id'] = req.uuid;data.author = req.userCtx.name;
message = req.uuid;
return [ data, message]
}"
}
doc现在有id和作者..
{ "_id":"a018fed749d64f5db754b39af80406b7",
"_rev":"1-c486b02d6f320eb15e6115e71b3f02cc",
"data":{"name":"myname","dob":"myDOB"},
"author":"admin"
}
答案 1 :(得分:1)
它可以帮助您使更新处理程序函数返回您的Request对象,如下代码:
(...)
return [doc, JSON.stringify(req)]
(...)
我这样做是为了理解/识别Request对象中的属性(这里是Request对象文档:http://docs.couchdb.org/en/latest/json-structure.html#request-object)