2016-05-03 7 views
1

Ich verwende pouchdb, um meine Anwendung offline zu machen. Ich habe einen couchdb-Dienst erstellt, der eine pouchdb-Datenbank lokal erstellt. Mein Code macht alles gut mit dem Browser. Es erstellt alle Dokumente lokal und synchronisiert sich gut mit dem Remote-Server. Aber wenn ich den Code auf Cordova Anwendung in Android-Plattform laufen, dann schaffen es die lokale Datenbank, aber nicht synchronisiert Daten mit Fern couchdb Datenbank ... und meine Dienste Code ist wie folgt:PouchDB Sync in Cordova-Anwendung

angular.module('couchDB.services', ["pouchdb"]).factory('CouchDBServices', CouchDBServices); 

    CouchDBServices.$inject = ['$q']; 

/** 
* @name CouchDBServices 
* @desc Singleton service class with static methods for actions with CouchDB. 
* @param $q - service that helps you run functions asynchronously, and use their return values 
*    when they are done processing 
* @param pouchDB - service with asynchronous APIs for work with couchDB 
* @param SERVER_ADDRESS - constant - remote url to couchdb instance 
*/ 
function CouchDBServices($q) { 


    var db = new PouchDB("user"); 
    console.log(db); 
    var remote="https://couchdb-6ea670.smileupps.com/chat"; 

    PouchDB.sync(db, remote, {live: true, retry: true}) 

    return { 
     getDocument:getDocument, 
     getDocuments:getDocuments, 
     createDocument:createDocument, 
     updateDocument:updateDocument, 
     checkUser:checkUser, 
     auth:auth, 
     conversationExists:conversationExists 
    }; 

    //Document function 

    /** 
    * @name getDocument 
    * @desc function fetch specific document from couchdb database 
    * @param id - document id 
    * @returns document 
    */ 
    function getDocument(id){ 




     console.log("CouchDBServices.getDocument()"); 
     var q = $q.defer(); 
     db.get(id).then(function (doc) { 
      console.log("success: "+doc); 
      q.resolve(doc); 
     }).catch(function (err) { 
      console.log("error; "+err); 
      q.reject(err); 
     }); 
     return q.promise; 
    } 

    /** 
    * @name getDocuments 
    * @desc function fetch document's from couchdb database 
    * @param ids - array of documents id 
    * @returns documents 
    */ 
    function getDocuments(ids){ 
     console.log("CouchDBServices.getDocuments()"); 
     var q = $q.defer(); 
     db.allDocs({ 
      keys:ids, 
      include_docs:true 
     }).then(function (doc) { 
      console.log("success: "+doc); 
      q.resolve(doc); 
     }).catch(function (err) { 
      console.log("error; "+err); 
      q.reject(err); 
     }); 
     return q.promise; 
    } 

    /** 
    * @name createDocument 
    * @desc function create document in couchdb database 
    * @param data - object with key - value properties 
    * @returns information about successfully or not successfully created document 
    */ 
    function createDocument(data){ 
     console.log("CouchDBServices.createDocument()"); 
     var q = $q.defer(); 


     db.put(data) 
      .then(function (response) { 
       console.log("success: "+JSON.stringify(response)); 
       q.resolve(response); 
      }).catch(function (err) { 
       q.reject(err); 
       console.log("err: "+err); 
      }); 
     return q.promise; 
    } 

    /** 
    * @name updateDocument 
    * @desc function update specific document in couchdb database 
    * @param id - document id 
    * @param data - object with key - value properties 
    * @returns information about successfully or not successfully created document 
    */ 
    function updateDocument(id,data){ 
     console.log("CouchDBServices.updateDocument()"); 
     var q = $q.defer(); 
     db.get(id).then(function(doc) { 
      return db.put(
       data, 
       doc._id, 
       doc._rev 
      ); 
     }).then(function(response) { 
      console.log("success: "+response); 
      q.resolve(response); 
     }).catch(function (err) { 
      console.log("err"+err); 
      q.reject(err); 
     }); 
     return q.promise; 
    } 

    //Query methods - uses design documents 

    /** 
    * @name checkUser 
    * @desc function checks if user (user document) exists in database 
    * @param userId - user id ie. document id 
    * @returns object with document id and info that user exists, 
    *   empty object if not exists and error if something isn't ok 
    */ 
    function checkUser(userId){ 
     console.log("CouchDBServices.checkUser()"); 
     var q = $q.defer(); 
     db.query('user/userExists', { 
      key   : userId, 
      include_docs : false, 
      limit  : 1 
     }).then(function (res) { 
      console.log("success: "+res); 
      q.resolve(res); 
     }).catch(function (err) { 
      q.reject(err); 
      console.log("err: "+err); 
     }); 
     return q.promise; 
    } 

    /** 
    * @name auth 
    * @desc function checks if user (user document) exists in database 
    * @param user - object with user phone and password 
    * @returns object with user document if exists, 
    *   empty object if not exists and error if something isn't ok 
    */ 
    function auth(user){ 
     console.log("CouchDBServices.auth()"); 
     var q = $q.defer(); 
     db.query('user/auth', { 
      key   : [user.phone,user.password], 
      include_docs : true 
     }).then(function (res) { 
      console.log("success: "+res); 
      q.resolve(res); 
     }).catch(function (err) { 
      q.reject(err); 
      console.log("err: "+err); 
     }); 
     return q.promise; 
    } 

    /** 
    * @name conversationExists 
    * @desc function checks if specific conversation document exists in database 
    * @param chatId - id of conversation document 
    * @returns object with conversation document if exists, 
    *   empty object if not exists and error if something isn't ok 
    */ 
    function conversationExists(chatId){ 
     console.log("CouchDBServices.conversationExists()"); 
     var q = $q.defer(); 
     db.query('conversation/chatExists', { 
      key   : chatId, 
      include_docs : true, 
      limit  : 1 
     }).then(function (res) { 
      console.log("success: "+res); 
      q.resolve(res); 
     }).catch(function (err) { 
      q.reject(err); 
      console.log("err: "+err); 
     }); 
     return q.promise; 
    } 
} 

Antwort

0

Höchstwahrscheinlich werden Sie entweder fehlen :

  1. eine Verbindung von dem Gerät an Ihren CouchDB,
  2. Ihre CouchDB auf 0.0.0.0 sind nicht verpflichtet, es zu 127.0.0.1 gebunden, dh es ist keine Verbindungen von anderen Geräten im Netzwerk annehmen kann,
  3. Ihre CouchDB hat kein CO RS konfiguriert (versuchen Sie Add-Cors-to-Couchdb)

Es könnte eines dieser Dinge sein. Der einfachste Weg, es herauszufinden, ist das Android-Gerät mit chrome://inspect zu untersuchen (öffnen Sie das in Chrome; es gibt Anweisungen here). Dann schauen Sie auf der Registerkarte Netzwerk nach und sehen Sie, was der Fehler ist.