incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stanley Iriele <siriele...@gmail.com>
Subject Re: simultaneously run update handler and update doc content
Date Wed, 20 Nov 2013 08:36:57 GMT
Wait...I believe you''re fundamentally have the idea of the update handler
wrong

"curl -s -X PUT 'http://localhost:5984/i7rmdb/_design/compnbd/_update/
timestamp/testid' -d @/tmp/2.json"

you don't need to pass in that json file

an update handler loads the latest version of that doc from the database
using the id you pass in the url...in this case it is "testid"
then couchdb places , a convenient version, of the http request you sent in
in the second parameter

your update function should look more like this:

function(doc, req) {
    if( doc.type == "profile" ) {

        var d = new Date();
        doc.serverISO8601time = d.toISOString();
        doc.serverTime = d.getTime() / 1000 ;
        log( toJSON(doc) ) ;
        return [doc , "OK"] ;
    }
}

and your curl command should look like this
"curl -s -X PUT 'http://localhost:5984/i7rmdb/_design/compnbd/_update/
timestamp/testid'

side note....pipe it into python -mjson.tool for nice json formatting





On Wed, Nov 20, 2013 at 12:16 AM, Vivek Pathak <vpathak@orgmeta.com> wrote:

> Ok - got it
>
> I should have used
>
>    var newdoc = JSON.parse(req.body) ;
>
> I guess returning string as the first arg was somehow silently ignored.
> Also the permissiveness of javascript allowed the rest of the code to run
> without exception
>
> js> newdoc = "hello world" ;
> "hello world"
> js> var d = new Date();
> js> newdoc.serverISO8601time = d.toISOString();
> "2013-11-20T08:14:55.731Z"
> js> newdoc.serverTime = d.getTime() / 1000 ;
> 1384935295.731
> js> newdoc
> "hello world"
>
>
> Thanks
>
>
>
> On 11/20/2013 03:10 AM, Vivek Pathak wrote:
>
>> Ok - so we are taking about the first problem only.
>>
>> If I try this, then I get not update to the data at all:
>>
>> function(doc, req) {
>>     if( doc.type == "profile" ) {
>>         var newdoc = req.body ;
>>         var d = new Date();
>>         newdoc.serverISO8601time = d.toISOString();
>>         newdoc.serverTime = d.getTime() / 1000 ;
>>         log( toJSON(newdoc) ) ;
>>         return [newdoc , "OK"] ;
>>     }
>> }
>>
>> What is wrong here?
>>
>>
>>
>>
>> On 11/20/2013 03:04 AM, Alexander Shorin wrote:
>>
>>> On Wed, Nov 20, 2013 at 12:01 PM, Vivek Pathak <vpathak@orgmeta.com>
>>> wrote:
>>>
>>>> On 11/20/2013 02:48 AM, Alexander Shorin wrote:
>>>>
>>>>> First problem is that your update function works with `doc` argument
-
>>>>> that is the stored within database document -, not that you had sent
>>>>> with PUT request. To process the request payload you need to work with
>>>>> req.body data, but in your case this isn't need to.
>>>>>
>>>>> Second is that both text and timestamp have actually changed - take a
>>>>> look on them one more time (;
>>>>>
>>>>
>>>> I see "hello 123" in both the text fields.  Not sure what you see as the
>>>> change.
>>>>
>>> Your update function changes only serverISO8601time and serverTime
>>> fields, not any others.
>>>
>>> --
>>> ,,,^..^,,,
>>>
>>
>>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message