Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
    Hendrik Roth
    @HendrikRoth
    i mean couchdb's "update" function
    ah. nano.atomic ... found it. sorry
    Landry Soules
    @landrysoules
    Hello. I'm in trouble with testing nano (with mocha/chai/sinon). I would like to simply verify nano.db.create is called in my code, but I can't get how to do it : var nano = require('nano')('http://localhost:5984'); var mock = sinon.mock(nano.db); mock.expects('db.create').atLeast(1).withExactArgs('bus_stop_dev').returns(true);
    But all I get is TypeError: Attempted to wrap undefined property db.create as function
    Does anybody know how can I get it right, please ?
    Landry Soules
    @landrysoules

    Hello. I'm in trouble with testing nano (with mocha/chai/sinon). I would like to simply verify nano.db.create is called in my code, but I can't get how to do it : var nano = require('nano')('http://localhost:5984'); var mock = sinon.mock(nano.db); mock.expects('db.create').atLeast(1).withExactArgs('bus_stop_dev').returns(true);
    But all I get is TypeError: Attempted to wrap undefined property db.create as function
    Does anybody know how can I get it right, please ?

    Changed my code : mock.expects('create') instead of 'db.create'. Now I get ExpectationError: Expected create(bus_stop_dev) at least once (never called)

    James Howe
    @OrangeDog
    is it possible to use nano through a socks5 proxy?
    James Howe
    @OrangeDog
    or do i need to find an http proxy that uses the socks proxy, then use that?
    James Howe
    @OrangeDog
    I used DeleGate
    hellboy81
    @hellboy81
    Hi. I am trying to (re)write/revision code that pipes input stream to attachment stream
    Callback should be called with response to client, if upload success
    with some JSON data
    where can I call this callback?
    // Should I call result callback from `cb`
    var ws = db.attachment.insert(documentName, attName, null, mimetype, {rev : response.rev}, function(...) {})
    
    // Or should I call in on ('end') event
    ws.on('end',  ...)
    
    // Should I catch write stream errors?
    ws.on('error', function (err) {...})
    
    // Should I catch input stream errors?
    file.on('error',  function(err) {...})
    
    file.pipe(ws)
    hellboy81
    @hellboy81
    Can you verify my code?
    Dominique Sandoz
    @streunerlein
    hi @hellboy81, this is how I do it (read file from disk, pipe to db attachment ):
    // add attachment
            var dbWriteStream = db.attachment.insert(doc._id, filename, null, type, {rev: doc._rev}, uploaded);
            var fileReadStream = fs.createReadStream(file.path);
    
            fileReadStream.on('error', error);
    
            dbWriteStream.on('error', error);
    
            fileReadStream.pipe(dbWriteStream);
    uploaded is the callback that gets called when piping is complete
    then, uploaded():
     function uploaded(err, body) {
              if (err) {
                console.log("[Attachment] Error in upload.");
                if (err.status_code === 409) {
                  console.log('Attachment upload conflict, retry.');
                  addAttachment(req, res);
                  return;
                }
                else {
                  console.log("Unrecoverable error in upload", err);
                  clearTmp();
                  return error(err);
                }
              }
    
              clearTmp();
              ....
    }
    hellboy81
    @hellboy81
    OK, should I handle event "Upload attachment completed" in callback , not in in attachment.on('end',...)
    Why?
    Dominique Sandoz
    @streunerlein
    hm not sure, I never got lucky using on('end', ...)
    also because there are two/three different approaches and i think it had to do with some API changes in streams in node and as well as modules can do it differently
    so i would suggest you to use the variant above, where nano handles it the way it wants
    hellboy81
    @hellboy81
    Only in callback I can get response from CouchDB?
    Dominique Sandoz
    @streunerlein
    yes
    hellboy81
    @hellboy81
    In `on 'end'' this information is not available?
    It's celar
    Dominique Sandoz
    @streunerlein
    when you get the response from CouchDB, it means streaming was ok, then of course, CouchDB errors can occur, but they have nothing to do with the streaming, that's why you have to check err in the callback
    @hellboy81 i have no idea, i just remember that dealing with on('end', ...) was not successful that time i wrote that code
    hellboy81
    @hellboy81
    I must handle only 409 (Conflict error)
    ?
    Dominique Sandoz
    @streunerlein
    you don't, but you can. It can happen, in my app it's quite frequent because there are many writes happening. But usually, Conflict is rare
    But a good programmer handles it in one way or the other ;)
    (my strategy here is to refetch the document to get the latest revision and try again to upload, as long until it works, may not be the best for all applications)
    for "making it work", you don't need to handle 409. Handle it when the problem gets frequent
    hellboy81
    @hellboy81
    OK, which kind of error expecting 409 can happens?
    Dominique Sandoz
    @streunerlein
    that has to do with CouchDBs conflict/revision system
    hellboy81
    @hellboy81
    I think Idea with upload retry is not suitable 4 me
    Dominique Sandoz
    @streunerlein
    read about it in the docs, it can also happen when you update the doc elsewhere
    ok then just go for it and not handle 409 that's perfectly fine
    hellboy81
    @hellboy81
    OK, its clear, In body object from uploaded handler is returned the most actual revison of the document
    Isn't it?
    wir können auch Deutsch sprechen ;-)
    Dominique Sandoz
    @streunerlein
    yes, it is - but in case of an error, body will be null
    No, let's go with english, as this is a public channel and other people may want to profit from our discussion
    aber danke :)
    hellboy81
    @hellboy81
    Jetzt alle müssen Deutsch lernen ;-)
    Habe noch eine Frage: wenn db.insert ein nicht-leereserr - Objekt zurückgibt, dies bedeutet automatisch, dass ok == false und umgekehrt kein Error - ok ist immer true
    ?
    Dominique Sandoz
    @streunerlein
    @hellboy81 I'll gladly answer your questions when you state it in english :)
    *them
    hellboy81
    @hellboy81

    OK, at the moment I have following problem:

    I am trying to implement attachment upload in the right way.

    As I mentioned I should do it in following steps

    • db.get - Get document (existing or not existing)
      • db.insert - If document not exists
    • db.attachment.insert - Insert attachment
      • If attachment upload success:
        - db.get to get the updated versions (with `_attachments`)
        - Add additional custom attachment meta data to the document 
        - db.insert - Save updated document

    Can you verify it?