通过Couchdb中的更新处理程序添加id和author字段

Adding id and author fields via a update handler in Couchdb

本文关键字:id 添加 author 字段 程序 处理 Couchdb 更新 通过      更新时间:2024-06-07

人们是如何通过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和author。。

{"_id":"a018fed749d64f5db754b39af80406b7","_rev":"1-c486b02d6f320eb15e6115e71b3f02cc","data":{"name":"myname","dob":"myDOB"},"author":"admin"}

我花了几个小时寻找并发布了我找到解决方案的问题。

这个来自-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和author。。

{   "_id":"a018fed749d64f5db754b39af80406b7",
    "_rev":"1-c486b02d6f320eb15e6115e71b3f02cc",
    "data":{"name":"myname","dob":"myDOB"},
    "author":"admin"
}

它可以帮助您使更新处理程序函数返回请求对象,如下代码:

(...)
return [doc, JSON.stringify(req)]
(...)

我这样做是为了理解/确定Request对象中的属性(以下是Request对象文档:http://docs.couchdb.org/en/latest/json-structure.html#request-对象)