O Ionic Framework ainda é um dos líderes no desenvolvimento de aplicativos móveis híbridos. Ele permite que você crie aplicativos para Android e iOS
usando apenas HTML, JavaScript e CSS.

Anteriormente, escrevi sobre como usar o Couchbase em
um aplicativo móvel Android e iOS do Ionic Framework
mas usava o Couchbase
Lite como seu banco de dados NoSQL incorporado. Desta vez, vamos substituir o Couchbase Lite pelo PouchDB. Você deve usar um
método em detrimento do outro? Não, no final, tudo se resume à preferência.

Se você ainda não viu minha postagem sobre PouchDB
e AngularJS com o Couchbase
Recomendo que você dê uma olhada, pois este tutorial usará muitos dos mesmos conceitos e códigos.

O que será necessário

Há alguns requisitos para o aplicativo que vamos criar. Veremos como obtê-los ao longo do processo, mas aqui está um
para que você saiba no que está se metendo.

  • Gateway de sincronização do Couchbase
  • PouchDB 4
  • Estrutura iônica 1

Obtendo o gateway de sincronização do Couchbase

Este projeto exigirá o Couchbase Sync Gateway para ser bem-sucedido. Se você não estiver familiarizado, o Couchbase Sync Gateway é um
serviço intermediário que lida com o processamento de dados entre o aplicativo local (seu aplicativo Ionic Framework) e o Couchbase Server. Nós
não usaremos o Couchbase Server neste exemplo, portanto o Sync Gateway atuará como nossa solução de armazenamento em memória na nuvem.

O Couchbase Sync Gateway pode ser encontrado por meio do Seção de downloads do Couchbase.

Criando nosso projeto de estrutura iônica

Antes de prosseguir, é bom observar que, se você não estiver usando um Mac, não poderá adicionar e criar para a plataforma iOS. Windows, Mac,
e Linux podem criar para Android, mas somente o Mac pode criar para iOS.

No prompt de comando (Windows) ou no Terminal (Mac e Linux), execute o seguinte comando para criar um novo projeto do Ionic Framework:

Nosso projeto de modelo em branco agora está pronto para ser trabalhado.

Incluindo as dependências

Se você ainda não o fez, download PouchDB 4 e anote o min.js arquivo como
que usaremos no projeto. Copie o
PouchDB min.js em seu projeto Ionic. www/js diretório.

Com o arquivo no lugar, abra o arquivo www/index.html e inclua o seguinte:

Essa linha de script deve aparecer acima da linha app.js e as informações de versão devem corresponder às de sua versão real
em vez da versão que incluí aqui.

Modificação do arquivo de índice

Antes de entrarmos no código do AngularJS, precisamos fazer uma revisão final no arquivo www/index.html arquivo. Abra-o e
substitua as tags pelo seguinte:

Como estamos usando o AngularJS UI-Router que vem com o Ionic Framework, precisamos apenas de um www/index.html arquivo.

Criando nosso serviço AngularJS do PouchDB

Antes de começarmos a usar o PouchDB, precisamos criar um invólucro para que ele se encaixe perfeitamente no AngularJS e no Ionic Framework. PouchDB pronto para uso
é uma biblioteca JavaScript simples, portanto, não é necessariamente a mais fácil de usar quando se trata de AngularJS.

Dentro da seção www/js/app.js inclua o seguinte código de serviço:

Você pode estar pensando que esse código parece familiar. Bem, é exatamente o código que usei em
o Exemplo anterior do PouchDB para AngularJS.
Agora podemos usar facilmente o PouchDB em nosso projeto.

Criação de um banco de dados local e início da sincronização

O objetivo aqui é criar um banco de dados local quando nosso aplicativo for iniciado (se ele ainda não existir) e, em seguida, iniciar a sincronização com o
Gateway de sincronização do Couchbase. Isso pode ser feito no AngularJS executar() função de nossa www/js/app.js
file:

Os endereços IP que usei podem variar para você em termos de simuladores, mas, para a produção, eles provavelmente corresponderão tanto ao iOS quanto ao
Android.

Projetando um controlador para suas visualizações

Ainda não criamos nossas exibições, mas vamos em frente e criar a lógica do controlador para elas. Abra a seção
www/js/app.js e inclua o seguinte controlador:

No momento, temos um controlador básico. Sabemos que salvaremos e excluiremos itens e, por isso, definimos uma função para isso
tarefas. Também temos uma função chamada back() que abrirá um item (voltará) na pilha do histórico.

Vamos começar de baixo para cima e começar com o back() função. Ela deve conter o seguinte código:

Quando se trata de excluir itens do banco de dados, precisaremos fornecer um ID de documento específico para excluir, bem como a revisão específica
que desejamos excluir. Tudo isso será passado a partir das exibições, mas a lógica será a seguinte:

O delete(id, rev) faz uma chamada para o serviço PouchDB que criamos.

Isso nos deixa com o salvar() função. Com base na simplicidade do nosso aplicativo, salvaremos apenas três dados
mas ela pode ser facilmente alterada, caso seja necessário. Dentro do seu controlador, crie a tag salvar() funcionam dessa forma:

Essa função faz duas coisas. Prepara uma inserção ou uma atualização caso um ID de documento e uma revisão de documento
estar disponível.

Mas ainda não terminamos. Embora tenhamos concluído todas as nossas funções, ainda precisamos lidar com a escuta de
mudanças. Quando chamamos $pouchDB.startListening(); em nosso controlador, nosso serviço PouchDB começará a usar o
AngularJS $broadcast. Enquanto estiver transmitindo, podemos ouvir essas transmissões usando algo como:

Agora, nossa lógica de controle de exibição está pronta para ser usada!

Definição das visualizações do Ionic Framework

A última parte de nosso www/js/app.js será usado para definir nossas exibições. Isso é feito no arquivo AngularJS
config() funcionam dessa forma:

Definimos duas exibições, uma para todos os itens de nossa lista e outra para criar e atualizar novos itens de lista. As item recebe um
id do documento e parâmetro de revisão do documento. Quando eles estão presentes, significa que estaremos atualizando um documento específico.

Toda a nossa lógica de AngularJS está completa agora. Inicializamos nosso banco de dados, começamos a sincronizar, definimos nossas exibições e planejamos a interação
de nossos pontos de vista.

Criação de uma visualização de lista

Aqui definiremos como os dados são apresentados na lista. Na seção www/templates/list.html adicione o seguinte código:

Ao passar o dedo sobre um item da lista, é apresentado um botão de exclusão que chamará o delete() do nosso controlador.

Criação de uma visualização de formulário

Aqui definiremos quais documentos serão inseridos ou atualizados em nosso banco de dados. Essencialmente, essa visualização é apenas um formulário. Na seção
www/templates/item.html adicione o seguinte código:

 

Configuração do Sync Gateway

O PouchDB e o Ionic Framework são apenas metade da história aqui. É claro que eles criarão um bom aplicativo executado localmente, mas queremos que as coisas sejam sincronizadas. O Couchbase Sync Gateway é o nosso endpoint para isso e, obviamente, o PouchDB funciona muito bem com ele.

Dentro da seção sync-gateway-config.json adicione o seguinte:

Essa é uma das configurações mais básicas existentes. Algumas observações sobre ela:

  • Ele usa walrus:data para armazenamento, que fica na memória e não persiste. Não deve ser usado para produção.
  • Todos os dados são sincronizados por meio do usuário GUEST, portanto, não há autenticação acontecendo aqui, mas poderia haver.
  • Estamos corrigindo os problemas de CORS, permitindo solicitações em localhost:9000, caso você queira servir com Python para testes de navegador.

Testando o aplicativo

Neste ponto, todo o nosso código está no lugar e o Sync Gateway está pronto para ser executado. Inicie o Sync Gateway executando o seguinte em um arquivo
Prompt de comando ou Terminal:

O Sync Gateway agora deve estar em execução e você pode validar isso acessando http://localhost:4984 no seu navegador da Web.

Testes para Android

Com um dispositivo conectado ou um simulador em execução, no prompt de comando ou no terminal, execute os dois comandos a seguir para criar e
instalar o arquivo APK:

Testes para iOS

Há duas boas maneiras de fazer isso. Você pode compilar o projeto e abri-lo com o Xcode, ou pode compilar e
emular o aplicativo sem iniciar o Xcode. A primeira pode ser feita da seguinte forma:

Em seguida, abra o diretório platform/ios/ do projeto e inicie o arquivo de projeto do Xcode.

Se você tiver instalado o pacote ios-sim do Node Package Manager (NPM), poderá fazer o seguinte:

Conclusão

Você viu agora que há duas maneiras de usar o Couchbase em seu aplicativo móvel Android e iOS do Ionic Framework. Você pode usar o
Plug-in do Apache Cordova Couchbase, conforme demonstrado em
o séries anteriores do blogou você pode
usar o PouchDB. Ambas são opções muito adequadas quando se trata de armazenamento e sincronização de dados entre plataformas em seu aplicativo.

Você pode obter o código-fonte completo desta postagem do blog por meio de
nosso Repositório do GitHub do Couchbase Labs.

Autor

Postado por Nic Raboy, defensor dos desenvolvedores, Couchbase

Nic Raboy é um defensor das modernas tecnologias de desenvolvimento móvel e da Web. Ele tem experiência em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experiências de desenvolvimento relacionadas a tornar o desenvolvimento móvel e da Web mais fácil de entender.

28 Comentários

  1. Olá, artigo interessante. Você conhece alguma hospedagem para o CouchDB para armazenar/sincronizar dados de aplicativos?

    1. Hi,

      Este artigo fala sobre o Couchbase. O CouchDB é um software totalmente diferente.

      Você pode hospedar o Couchbase em praticamente qualquer coisa. As soluções de hospedagem mais populares são AWS e Joyent, mas há muitas outras.

      Isso responde à sua pergunta?

      Melhor,

      1. Erro meu, eu sempre cometo esse erro...
        Estou procurando uma hospedagem Couchbase realmente simples, algo como o heroku, por exemplo...
        Muitos tutoriais sobre o PouchDB explicam como usá-lo localmente, mas não consigo encontrar nenhum que mostre a sincronização real entre dispositivos com um servidor (e algumas recomendações para hospedagem, segurança...).

        Ainda estou um pouco confuso sobre como usar o PouchDB / Couchbase como armazenamento primário para um aplicativo, mas devo investigar/testar mais ;)

        1. Você pode ler isto:

          http://www.couchbase.com/2015

          Esta é a parte 1 de uma série de duas partes para fazer com que o Couchbase Server e o Couchbase Sync Gateway funcionem no AWS.

          Melhor,

          1. Vou verificar. Muito obrigado.

          2. Não tem problema! Informe-nos sobre as descobertas que você fizer :-)

  2. Obrigado, senhor, por esse excelente tutorial.

      1. Olá, senhor,
        Obrigado, entendi tudo corretamente.
        Além disso, eu estava tentando adicionar outra entrada, ou seja, uma entrada de data. Eu a forneci ao parâmetro e argumento da função salvar.
        E estava tudo bem depois de salvar no banco de dados, mas não estava exibindo o valor da data no modo de edição.
        Obrigado.

        1. Olá, senhor,
          Acabei resolvendo o problema ao incluir isso na função get.

          $scope.inputForm.Date = new Date($scope.inputForm.Date);

  3. Olá, senhor,
    Mais uma vez, obrigado pelo tutorial.
    Gostaria de dizer que encontrei esse lançamento no console ao testar o aplicativo depois de algum tempo.
    Estou usando (windows, ionic, angularjs, chrome).

    \" (nó) aviso: possível vazamento de memória do EventEmitter detectado. 11 ouvintes adicionados. Use emitter.setMaxListeners() para aumentar o limite \"

    Obrigado

    1. De acordo com Nolan Lawson, o criador do PouchDB, isso é apenas um aviso e não um erro:

      http://pouchdb.com/errors.html

      Ele recomenda a atualização para o PouchDB 5 e o aumento do limite se você quiser que o erro desapareça.

      Melhor,

  4. Oi Nic,

    Obrigado pelos tutoriais!

    Tentei usar o \"Couchbase Lite PhoneGap\" e o \"PouchDB + SQLite\" como um cliente para o Sync Gateway.
    Parece que o \"Couchbase Lite PhoneGap\" tem alguns problemas: https://github.com/couchbasela... e também o PouchDB é mais multiplataforma, na minha opinião (podemos reutilizar o código em aplicativos da Web também) - espero que o Couchbase Sync Gateway não interrompa a integração com o PouchDB e vice-versa.

    Então, tentei atualizar seu exemplo para o PouchDB 5.1.0 mais recente e encontrei erros e problemas (acho que estão relacionados à integração do CORS e também são semelhantes a este): https://github.com/pouchdb/pou

    Você já experimentou a versão mais recente do PouchDB 5.1.0 / ou até mesmo a última compilação noturna que corrige alguns dos bugs?

    Você poderia fornecer mais informações: você usou intencionalmente a versão 4.x mais recente: 4.0.3, devido aos erros acima ou a outros problemas?

    Exemplo de serviços do PouchDB 5.x que eu escrevi: https://gist.github.com/Danail

    1. Olá,

      Escrevi / publiquei este artigo apenas alguns dias antes do lançamento da versão 5.x. Não foi intencional usar uma versão mais antiga. Conversei com Nolan Lawson, o criador do PouchDB, e ele disse que deveria funcionar.

      Farei alguns testes e lhe informarei.

      Melhor,

      1. Obrigado por sua resposta rápida!

        Testei com a versão mais recente \"Couchbase Sync Gateway Community Edition 1.1.1\" e \"PouchDB 5.0.1\" - antes de usar a imagem do Docker, que não é a versão mais recente (a imagem mais recente do docker é 1.1.0 https://hub.docker.com/r/couch... e tem bugs críticos - http://developer.couchbase.com….

        A migração de seu aplicativo de teste é fácil: https://github.com/DanailMinch... e não precisa de nenhuma alteração específica.

        Portanto, os resultados são os mesmos:

        Quando inicio o aplicativo e no aplicativo:
        1. inserir o primeiro registro
        2. editar o mesmo registro
        3. excluir o mesmo registro
        Posso ver as mudanças em http://localhost:4985/_admin/db/test-database

        Mas, depois disso, recebo alguns erros estranhos no console do Sync Gateway:

        2015-11-20T13:59:55.370Z Changes+: MultiChangesFeed: canais expandem para channels.TimedSet{\"*\":0x0} ...
        2015-11-20T13:59:55.370Z Changes: MultiChangesFeed concluído
        2015-11-20T13:59:55.370Z Changes+: MultiChangesFeed: canais expandem para channels.TimedSet{\"*\":0x0} ...
        2015-11-20T13:59:55.370Z Changes+: MultiChangesFeed aguardando...
        2015-11-20T13:59:55.370Z Changes+: Aguardando a contagem do \"test-database\"\ passar de 6
        2015-11-20T13:59:55.761Z HTTP: #791: GET /?_nonce=1448027995207
        2015-11-20T13:59:55.786Z HTTP: #792: GET /test-database/_local/pqPlGGz4hPigHnXAGLPSNg==?&_nonce=1448027995234
        2015-11-20T13:59:55.787Z HTTP: #792: -> 404 ausente (0,4 ms)
        2015-11-20T13:59:55.824Z HTTP: #793: POST /test-database/_revs_diff?_nonce=1448027995276
        2015-11-20T13:59:55.839Z HTTP: #794: GET /test-database/_local/pqPlGGz4hPigHnXAGLPSNg==?&_nonce=1448027995290
        2015-11-20T13:59:55.840Z HTTP: #794: -> 404 ausente (0,3 ms)
        2015-11-20T13:59:55.859Z HTTP: #795: POST /test-database/_bulk_docs?_nonce=1448027995309
        2015-11-20T13:59:55.860Z BulkDocs: Doc \"_local/pqPlGGz4hPigHnXAGLPSNg==\" -> 400 Invalid doc ID (400 ID de documento inválido)
        2015-11-20T13:59:56.174Z HTTP: #796: GET /?_nonce=1448027995616
        2015-11-20T13:59:56.200Z HTTP: #797: GET /test-database/_local/pqPlGGz4hPigHnXAGLPSNg==?&_nonce=1448027995646
        2015-11-20T13:59:56.200Z HTTP: #797: -> 404 ausente (0,2 ms)
        2015-11-20T13:59:56.231Z HTTP: #798: POST /test-database/_revs_diff?_nonce=1448027995683
        2015-11-20T13:59:56.246Z HTTP: #799: GET /test-database/_local/pqPlGGz4hPigHnXAGLPSNg==?&_nonce=1448027995698
        2015-11-20T13:59:56.247Z HTTP: #799: -> 404 ausente (0,3 ms)
        2015-11-20T13:59:56.265Z HTTP: #800: POST /test-database/_bulk_docs?_nonce=1448027995718
        2015-11-20T13:59:56.265Z BulkDocs: Doc \"_local/pqPlGGz4hPigHnXAGLPSNg==\" -> 400 Invalid doc ID (400 ID de documento inválido)
        2015-11-20T13:59:57.988Z HTTP: #801: GET /?_nonce=1448027997429
        2015-11-20T13:59:58.015Z HTTP: #802: GET /test-database/_local/pqPlGGz4hPigHnXAGLPSNg==?&_nonce=1448027997462
        2015-11-20T13:59:58.015Z HTTP: #802: -> 404 ausente (0,4 ms)
        2015-11-20T13:59:58.065Z HTTP: #803: POST /test-database/_revs_diff?_nonce=1448027997511
        2015-11-20T13:59:58.087Z HTTP: #804: GET /test-database/_local/pqPlGGz4hPigHnXAGLPSNg==?&_nonce=1448027997531
        2015-11-20T13:59:58.087Z HTTP: #804: -> 404 ausente (0,3 ms)
        2015-11-20T13:59:58.106Z HTTP: #805: POST /test-database/_bulk_docs?_nonce=1448027997558
        2015-11-20T13:59:58.106Z BulkDocs: Doc \"_local/pqPlGGz4hPigHnXAGLPSNg==\" -> 400 Invalid doc ID (400 Invalid doc ID)
        2015-11-20T13:59:58.545Z HTTP: #806: GET /?_nonce=1448027997993
        2015-11-20T13:59:58.574Z HTTP: #807: GET /test-database/_local/pqPlGGz4hPigHnXAGLPSNg==?&_nonce=1448027998022
        2015-11-20T13:59:58.574Z HTTP: #807: -> 404 ausente (0,3 ms)

        Que continua em loop e meu segundo registro não consegue sincronizar com o gateway.

      2. Obrigado por sua resposta!

        Testei com a versão mais recente \"Couchbase Sync Gateway Community Edition 1.1.1\" e \"PouchDB 5.0.1\" (também com imagens do Docker)

        Os resultados são os mesmos:

        Quando inicio o aplicativo e no aplicativo:
        1. inserir o primeiro registro
        2. editar o mesmo registro
        3. excluir o mesmo registro
        Posso ver as mudanças em http://localhost:4985/_admin/db/test-database

        Mas, depois disso, recebo alguns erros estranhos no console do Sync Gateway:

        2015-11-20T13:59:55.370Z Changes+: MultiChangesFeed: canais expandem para channels.TimedSet{\"*\":0x0} ...
        2015-11-20T13:59:55.370Z Changes: MultiChangesFeed concluído
        2015-11-20T13:59:55.370Z Changes+: MultiChangesFeed: canais expandem para channels.TimedSet{\"*\":0x0} ...
        2015-11-20T13:59:55.370Z Changes+: MultiChangesFeed aguardando...
        2015-11-20T13:59:55.370Z Changes+: Aguardando a contagem do \"test-database\"\ passar de 6
        2015-11-20T13:59:55.761Z HTTP: #791: GET /?_nonce=1448027995207
        2015-11-20T13:59:55.786Z HTTP: #792: GET /test-database/_local/pqPlGGz4hPigHnXAGLPSNg==?&_nonce=1448027995234
        2015-11-20T13:59:55.787Z HTTP: #792: -> 404 ausente (0,4 ms)
        2015-11-20T13:59:55.824Z HTTP: #793: POST /test-database/_revs_diff?_nonce=1448027995276
        2015-11-20T13:59:55.839Z HTTP: #794: GET /test-database/_local/pqPlGGz4hPigHnXAGLPSNg==?&_nonce=1448027995290
        2015-11-20T13:59:55.840Z HTTP: #794: -> 404 ausente (0,3 ms)
        2015-11-20T13:59:55.859Z HTTP: #795: POST /test-database/_bulk_docs?_nonce=1448027995309
        2015-11-20T13:59:55.860Z BulkDocs: Doc \"_local/pqPlGGz4hPigHnXAGLPSNg==\" -> 400 Invalid doc ID (400 ID de documento inválido)
        2015-11-20T13:59:56.174Z HTTP: #796: GET /?_nonce=1448027995616
        2015-11-20T13:59:56.200Z HTTP: #797: GET /test-database/_local/pqPlGGz4hPigHnXAGLPSNg==?&_nonce=1448027995646
        2015-11-20T13:59:56.200Z HTTP: #797: -> 404 ausente (0,2 ms)
        2015-11-20T13:59:56.231Z HTTP: #798: POST /test-database/_revs_diff?_nonce=1448027995683
        2015-11-20T13:59:56.246Z HTTP: #799: GET /test-database/_local/pqPlGGz4hPigHnXAGLPSNg==?&_nonce=1448027995698
        2015-11-20T13:59:56.247Z HTTP: #799: -> 404 ausente (0,3 ms)
        2015-11-20T13:59:56.265Z HTTP: #800: POST /test-database/_bulk_docs?_nonce=1448027995718
        2015-11-20T13:59:56.265Z BulkDocs: Doc \"_local/pqPlGGz4hPigHnXAGLPSNg==\" -> 400 Invalid doc ID (400 ID de documento inválido)
        2015-11-20T13:59:57.988Z HTTP: #801: GET /?_nonce=1448027997429
        2015-11-20T13:59:58.015Z HTTP: #802: GET /test-database/_local/pqPlGGz4hPigHnXAGLPSNg==?&_nonce=1448027997462
        2015-11-20T13:59:58.015Z HTTP: #802: -> 404 ausente (0,4 ms)
        2015-11-20T13:59:58.065Z HTTP: #803: POST /test-database/_revs_diff?_nonce=1448027997511
        2015-11-20T13:59:58.087Z HTTP: #804: GET /test-database/_local/pqPlGGz4hPigHnXAGLPSNg==?&_nonce=1448027997531
        2015-11-20T13:59:58.087Z HTTP: #804: -> 404 ausente (0,3 ms)
        2015-11-20T13:59:58.106Z HTTP: #805: POST /test-database/_bulk_docs?_nonce=1448027997558
        2015-11-20T13:59:58.106Z BulkDocs: Doc \"_local/pqPlGGz4hPigHnXAGLPSNg==\" -> 400 Invalid doc ID (400 Invalid doc ID)
        2015-11-20T13:59:58.545Z HTTP: #806: GET /?_nonce=1448027997993
        2015-11-20T13:59:58.574Z HTTP: #807: GET /test-database/_local/pqPlGGz4hPigHnXAGLPSNg==?&_nonce=1448027998022
        2015-11-20T13:59:58.574Z HTTP: #807: -> 404 ausente (0,3 ms)

        Que continua em loop e meu segundo registro não consegue sincronizar com o gateway.

      3. Olá novamente,

        Parece que o PouchDB 5.0.0 funciona com o projeto, mas o 5.1.0 não funciona.

        Eu criei um problema aqui: https://github.com/pouchdb/pou

        Informe-me se conseguiu atualizar para a versão 5.1.0 mais recente ou qualquer outra novidade, obrigado!

  5. FairwindTechnologies janeiro 22, 2016 em 10:01 pm

    Estou pensando em usar quase exatamente esse paradigma para a solução que estou desenvolvendo para crianças com TDAH. Gostaria de usar o Couchbase Sync para manter os dados dos usuários sincronizados entre o aplicativo local do usuário no Ionic e o banco de dados mestre na nuvem. Não tenho certeza de como a autenticação do usuário nos bancos de dados funcionaria/sincronizaria com um serviço CAS/OAuth 2 que será usado pelo Spring Security para autenticar solicitações de usuários fora do ambiente de banco de dados do site e/ou de outras funções móveis. Existe uma maneira de sincronizar as contas de usuário do couchbase com outros serviços de autenticação, como oauth ou CAS ou algum outro serviço baseado em token? Minha arquitetura original não era um projeto off-line em primeiro lugar e eu usaria apenas o acesso baseado em token aos serviços da Web nos componentes móveis e da Web, mas o CouchBase com Sync parece ser tão incrível para fazer a sincronização do banco de dados que quero aproveitar isso! Qualquer opinião seria muito bem-vinda! Você ou o couchbase oferecem serviços de consultoria de arquitetura? De qualquer forma, informe-me sobre a sincronização da conta do usuário!

    A propósito, estou usando o AWS e também li a postagem http://www.couchbase.com/2015... o que também é relevante para o que estou tentando fazer. Imagine isso com uma versão web também e tentando manter os dados E as contas de usuário sincronizados em ambas as plataformas...

    Obrigado,

    Rico

    1. Quando você diz CAS, está se referindo ao Jasig CAS? Não acho que seria um problema combinar isso com sua solução de logon único.

      Mencionei sua solicitação de consultoria em arquitetura para minha equipe. Posso pedir que envie um e-mail para services@couchbase.com. Basta fazer referência a esta postagem nela.

      Melhor,

      1. FairwindTechnologies janeiro 22, 2016 em 11:16 pm

        Nic, sim, eu quis dizer JASIG CAS. Em resumo, sim, estou tentando descobrir a melhor forma de integrar o CB com uma solução de SSO baseada em token. Enviarei um e-mail para sua equipe de serviços, obrigado.

        1. Fantástico. Tenho certeza de que entraremos em contato :-)

  6. Oi Nic,

    Muito obrigado por esse tutorial!

    No entanto, parece que estou tendo alguns problemas quando tento salvar documentos no meu sync_gateway (por meio da morsa ou de um bucket no servidor Couchbase).

    Também estou recebendo uma saída estranha do meu Sync Gateway (estou usando o bucket \'default\'):

    Tareks-MacBook-Pro:ionic-framework-pouchdb-master Tarek$ sync_gateway sync-gateway-config.json
    2016-04-26T14:36:38.840+03:00 Habilitando o registro: [CRUD+ REST+ Changes+ Attach+]
    2016-04-26T14:36:38.840+03:00 ==== Couchbase Sync Gateway/1.1.1(10;2fff9eb) ====
    2016-04-26T14:36:38.841+03:00 Configurou o Go para usar todas as 4 CPUs; setenv GOMAXPROCS para substituir isso
    2016-04-26T14:36:38.841+03:00 Processo configurado para permitir 5000 descritores de arquivos abertos
    2016-04-26T14:36:38.841+03:00 Abrindo o db /default como bucket \"default\", pool \"default\", servidor
    2016-04-26T14:36:38.841+03:00 Abrindo o banco de dados padrão do Couchbase em
    2016/04/26 14:36:38 Tentando com http://127.0.0.1:8091/pools/default/bucketsStreaming/default
    2016/04/26 14:36:38 Tentando com o nó selecionado 0
    2016/04/26 14:36:38 Obteve nova configuração para o bucket padrão
    2016/04/26 14:36:38 Tentando com o nó selecionado 0
    2016-04-26T14:36:38.987+03:00 Redefinir o usuário convidado para a configuração
    2016-04-26T14:36:38.987+03:00 Iniciando o servidor de administração em 127.0.0.1:4985
    2016-04-26T14:36:38.991+03:00 Iniciando o servidor em :4984 ...
    2016-04-26T14:36:49.750+03:00 HTTP: #001: GET /default/?_nonce=1461670609748
    2016-04-26T14:37:49.464+03:00 HTTP: #002: GET /default/?_nonce=1461670669460
    2016-04-26T14:37:50.572+03:00 HTTP: #003: GET /default/?_nonce=1461670670570
    2016-04-26T14:37:50.833+03:00 HTTP: #004: GET /default/?_nonce=1461670670831
    2016-04-26T14:37:52.465+03:00 HTTP: #005: GET /default/?_nonce=1461670672463
    2016-04-26T14:37:52.793+03:00 HTTP: #006: GET /default/?_nonce=1461670672792
    2016-04-26T14:37:55.567+03:00 HTTP: #007: GET /default/?_nonce=1461670675566
    2016-04-26T14:37:56.393+03:00 HTTP: #008: GET /default/?_nonce=1461670676392
    2016-04-26T14:38:00.794+03:00 HTTP: #009: GET /default/?_nonce=1461670680792
    2016-04-26T14:38:02.589+03:00 HTTP: #010: GET /default/?_nonce=1461670682587

    Se precisar de mais informações de minha parte, entre em contato.

    Com os melhores cumprimentos,
    Tarek M.

    1. Olá, Tarek,

      Não vejo nada fora do comum no seu registro do Sync Gateway. Você pode me fornecer mais informações sobre o que está causando problemas ao salvar?

      Melhor,

      1. Tarek Moubarak abril 26, 2016 em 8:28 pm

        Oi Nic,

        Obrigado por sua resposta rápida! O problema é que, no momento, não consigo ver nenhum documento novo no meu servidor CouchBase (minha principal prioridade é ver os dados nos buckets em vez de usar a morsa). Foi assim que configurei meu gateway de sincronização (atualmente na versão 1.2):

        {
        \"log\":[\"CRUD+\", \"REST+\", \"Changes+\", \"Attach+\"],
        \"bancos de dados\": {
        \"default\": {
        \"server\":\"http://localhost:8091\",
        \"bucket\":\"default\",
        \"sync\":
        function (doc) {
        channel (doc.channels);
        }
        ,
        \"usuários\": {
        \"GUEST\": {
        \"disabled\": false,
        \"admin_channels\": [\"*\"]
        }
        }
        }
        },
        \"CORS\": {
        \"Origin\": [\"http://localhost:9000\"],
        \"LoginOrigin\": [\"http://localhost:9000\"],
        \"Headers\": [\"Content-Type\"],
        \"MaxAge\": 17280000
        }
        }

        Tentei adicionar o nível de registro no gateway de sincronização, mas não consegui ver nenhuma mensagem POST ou PUT sendo chamada, nem consegui vê-las no gateway de sincronização.

        Também usei o comando: python -m SimpleHTTPServer 9000 para CORS.

        Talvez eu esteja perdendo uma etapa ou algo esteja mal configurado?

        Desde já, agradeço sua ajuda. :)

        1. Você não está tentando usar o Ionic Serve, o Ionic Ionic-Live Reload ou o Ionic View, está? Eles tendem a não funcionar com plug-ins nativos. Além disso, o que dizem os registros do seu aplicativo? Você provavelmente quer começar por aí.

          Melhor,

          1. Tarek Moubarak maio 5, 2016 em 1:21 pm

            Oi Nic,

            Muito obrigado! Inicialmente, eu estava testando no ionic serve, mas tentei diretamente no meu dispositivo móvel e funcionou perfeitamente.
            No entanto, as tentativas anteriores falharam porque meu dispositivo móvel e o servidor estavam conectados em redes diferentes, o que causou alguma confusão.

            Muito obrigado, Nic!

          2. Não tem problema!

Deixar uma resposta