Agregar campos de identificación y autor a través de un controlador de actualización en Couchdb

¿Cómo agregan las personas campos adicionales a través del controlador de actualización en Couchdb? Me gustaría agregar el autor (tengo una función de validación para verificar que el usuario haya iniciado sesión) y la identificación agregada cuando se crea un nuevo documentador a través de un controlador de actualización.

El nombre del autor proviene de req.userCtx.Name, los datos que he enviado están en req.body y estoy usando req.uuid como _id

"updates": {
   "new": "function(doc,req) { var message = req.uuid; return [ { _id : req.uuid, "author" : req.userCtx.name, data : req.body}, message]}"
}

Los datos se han enviado a través de un curl POST

$ cat test.json
{"data" : {"name" : "myname","dob" : "myDOB"}}

Así es como se ven los datos a través del controlador de actualización

{"_id":"a018fed749d64f5db754b39af803a88f","_rev":"1-939793c36d2bfe4de86f808fab056959","author":"admin","data":"{\"name\" : \"myname\",\"dob\" : \"myDOB\"}"}

Si hago un POST estándar (no a través de un controlador de actualización) se ve así...

{"_id":"a018fed749d64f5db754b39af803b621","_rev":"1-e44f0471e1df1018439fee3681b49547","data":{"name":"myname","dob":"myDOB"}}

Qué estoy haciendo mal ?


EDITAR

Después de haber pasado unas horas buscando y luego publicando las preguntas, encontré la solución.

Esto ayudó - 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 ahora tiene id y autor ..

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

preguntado el 31 de julio de 12 a las 13:07

Como nuevo usuario, me toma 8 horas antes de que pueda responder a su propia pregunta, así que en lugar de no responder nunca, pensé en editar en caso de que me olvidé de volver. Ya he respondido :-) -

2 Respuestas

Después de haber pasado unas horas buscando y luego publicando las preguntas, encontré la solución.

esto de - 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 ahora tiene id y autor ..

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

Respondido 01 ago 12, 01:08

Podría ayudarlo a hacer que su función Actualizar controlador devuelva su objeto Solicitud como este código:

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

Hice eso para comprender/identificar cuáles eran las propiedades que venían en el objeto Solicitud (aquí está la Documentación del objeto Solicitud: http://docs.couchdb.org/en/latest/json-structure.html#request-object)

Respondido el 24 de diciembre de 13 a las 07:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.