2016-10-08 2 views
0

Ich bekomme einen seltsamen Konflikt mit PouchDB beim Hinzufügen eines neuen Dokuments. Der Konflikt tritt auf, wenn ein neues Dokument erstellt wird, kurz nachdem ein neues Dokument erstellt wurde. Wenn ich jedoch ca. 5 Minuten warte, tritt der Konflikt nicht mehr auf. Ich bin sehr dabei, das zu lösen.PouchDB 409 beim Hinzufügen von doc.

Ich verwende einen Express mit Knoten. Hier ist meine Methode zum Hinzufügen eines Elements. Es wird in einem Router verwendet (siehe unten)

//require stuff 
... 
//require pouch 
var PouchDB = require('pouchdb'); 
//db setup 
var db = new PouchDB('http://127.0.0.1:5984/db'); 

module.exports = { 
     addItem: (req, res, next) => { 
     //check body fields with express validator 
     req.checkBody('firstname', "Invalid, please enter firstname").notEmpty(); 
     req.checkBody('lastname', "Invalid, please enter lastname").notEmpty(); 
     req.checkBody('address', "Invalid, please enter address").notEmpty(); 
     var phonenumber = req.body.phonenumber; //phone number is optional dont use express validator 
     var errors = req.validationErrors(); 
     if (errors) { 
      res.render('add', { 
      errors: errors 
      }); 
     } 
     var newDoc = { 
      _id: date.toString() , 
      firstname: req.body.firstname, 
      lastname: req.body.lastname, 
      address: req.body.address, 
      phonenumber: phonenumber, 
      dateAdded: moment(date).format("dddd, MMMM Do YYYY, h:mm:ss a") 
     } 

     db.put(
      newDoc 
     ).then(function (response) { 
      res.redirect('/feed'); 
     }).catch(function (err) { 
      if (err){ 
      return next(err); 
      } 
     }); 
     }, 
    ... 
    //more methods 
} 
... 
//export module 

Router für das Hinzufügen von

//require all the stuff 
//post new item route 
router.route('/feed/add').post(ActionController.addItem); 

Antwort

0

ich das pouchdb-Upsert verwendet, um dieses Problem zu beheben. https://github.com/pouchdb/upsert

und die Methode puIfNotExists verwendet.

... 
    //save item to array and db 
    db.putIfNotExists({ 
     _id: date.toString(), 
     firstname: req.body.firstname, 
     lastname: req.body.lastname, 
     address: req.body.address, 
     phonenumber: phonenumber, 
     dateAdded: moment(date).format("dddd, MMMM Do YYYY, h:mm:ss a") 
    }).then(function() { 
     return res.redirect('/feed'); 
    }).catch(function (err) { 
     if (err) { 
     return next(err); 
     } 
    }) 
...