首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >科尔多瓦应用程序中的PouchDB同步

科尔多瓦应用程序中的PouchDB同步
EN

Stack Overflow用户
提问于 2016-05-03 13:18:22
回答 1查看 421关注 0票数 1

我正在使用pouchdb使我的应用程序离线。我已经创建了一个couchdb服务,它在本地创建一个pouchdb数据库。我的代码在浏览器中做得很好。它在本地创建所有文档,并与远程服务器很好地同步。但是,当我在android平台上的Cordova应用程序上运行代码时,它创建了本地数据库,但没有将数据与远程couchdb数据库…同步我的服务代码如下:

代码语言:javascript
复制
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;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2016-05-04 08:35:00

最有可能的是您缺少以下内容:

  1. a connection from the device to your CouchDB,
  2. your CouchDB is not meaning to 0.0.0.0,it meaning to 127.0.0.1,意思是无法接受来自网络上其他设备的连接,
  3. your CouchDB没有配置CORS (尝试CORS

可能是这些东西中的任何一个。解决这个问题最简单的方法是使用chrome://inspect检查安卓设备(在Chrome中打开它,上面有here说明)。然后查看Network选项卡,查看错误是什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36996123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档