Primeiras etapas com o PouchDB e o Sync Gateway

Esta semana, PouchDB v3.4.0 foi lançado com compatibilidade com o Couchbase Sync Gateway.

Nesta postagem, usaremos o exemplo TodoMVC existente e adicionaremos a sincronização filtrada usando a autenticação do Facebook. Além da sincronização entre clientes da Web, alteraremos ligeiramente o modelo de dados para sincronizar com os aplicativos ToDoLite existentes em execução no iOS e Android:

Para acompanhar o processo, você pode abrir e executar o exemplo do TodoMVC em commit d9bb961. Por conveniência, adicionei o código de login do Facebook em app.js. Quando o usuário faz o login, a função startSessionAndSync(accessToken, userId) é chamado. Agora vamos adicionar o código para que isso aconteça!

Início rápido

Certifique-se de servir o aplicativo na porta 9000 pois configuraremos o CORS para localhost:9000 mais tarde. O simples comando python deve servir:

Modelagem de dados

O TodoMVC e o ToDoLite têm um modelo de dados ligeiramente diferente. Nos aplicativos ToDoLite, um usuário pode criar várias listas e compartilhá-las com vários usuários.

Primeiro, vamos dar uma olhada em um documento de Tarefa com o esperado título e uma propriedade ID da lista fazendo referência à lista à qual pertence (nesse caso, 123):

Da mesma forma, um documento de lista também tem um título e um proprietário que faz referência ao usuário ao qual ele pertence:

No entanto, o TodoMVC é um aplicativo de lista única. Para simplificar as coisas, podemos inserir o documento de lista no código assim que o usuário fizer login.

Vamos criar uma nova função chamada migrateGuestToUser para criar o documento de lista com o ID do usuário e salvá-lo no PouchDB:

Observação: É muito importante definir o campo proprietário, pois a função de sincronização rejeitará o documento caso contrário.

E podemos chamá-lo em startSessionAndSync:

Os documentos de tarefa pertencem a uma lista e, portanto, têm um ID da lista que precisamos definir. Altere a propriedade addTodo função em app.js para que fique como abaixo. Observe que definimos o ID da lista para o campo hardcoded _id da lista que inserimos acima:

Agora que temos os documentos apropriados em conformidade com o modelo de dados do ToDoLite, podemos dar uma olhada na autenticação e na replicação.

Habilitação de CORS no Sync Gateway

Neste tutorial, executaremos uma instância local do Sync Gateway em localhost:4984 mas estamos servindo nosso aplicativo Web em localhost:9000. Nesse ponto, receberíamos um erro de política de mesma origem. Mas Chris recentemente adicionou o suporte a CORS ao Sync Gateway para essa finalidade. Portanto, não precisamos escrever uma única linha de código do lado do servidor :)

O CORS permite que os aplicativos da Web acessem recursos em outros domínios que não o domínio de origem. Ao ativar o CORS no Sync Gateway, estamos dizendo ao navegador "Sim, o nome de domínio do Sync Gateway tem permissão para se comunicar com este aplicativo Web". Abrir sync-gateway-config.json com a configuração extra do CORS para habilitá-lo em localhost:9000:

Use o Sync Gateway 1.1 ou posterior. Inicie-o com o arquivo de configuração:

Voltar para app.jsatualize a url do remoteCouch de acordo:

Agora, se tentarmos sincronizar a lista com o Sync Gateway, receberemos um erro 401 Unauthorized. Vamos corrigir isso criando uma sessão de usuário com o login do Facebook.

Autenticação com o Sync Gateway

Para autenticar com o Sync Gateway, podemos enviar uma solicitação POST para /todos/_facebook com o token de acesso, se recebermos um 200 OK, o navegador definirá o cookie de sessão retornado do Sync Gateway para futuras replicações push/pull.

Observação: É importante definir request.withCredentials = true em uma solicitação CORS para salvar o cookie retornado do Sync Gateway para futuras solicitações autenticadas (replicações push/pull).

Ligue para ele startSessionAndSync passando o accessToken voltamos do Facebook:

Encerramento

Agora, abra o navegador e teste a sincronização dos itens de tarefas com outra janela do navegador aberta ou com os aplicativos nativos que executam o TodoLite.

Os usuários ainda podem criar tarefas sem estar conectados. Mas assim que um usuário faz login, as tarefas pertencem à lista do usuário. Fornecer um recurso de conta de convidado é um dos muitos benefícios da criação de recursos off-line primeiro.

Observe o Lista TodoMVC é exibido como uma tarefa no Chrome. Isso ocorre porque este exemplo estava usando o todos os documentos para exibir tarefas.

Na próxima postagem, usaremos as consultas Map/Reduce para adicionar o recurso de várias listas e um documento de perfil para compartilhá-las com outros usuários.

Leia mais:

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por James Nocentini, redator técnico, celular, Couchbase

James Nocentini é o redator técnico responsável pela documentação do Couchbase Mobile. Anteriormente, ele trabalhou como Developer Advocate e, antes disso, como desenvolvedor front-end da HouseTrip. Ele também gosta de escrever tutoriais sobre Android para raywenderlich.com em seu tempo livre.

9 Comentários

  1. Nuthan Santharam abril 29, 2015 em 8:56 am

    Olá James, obrigado pelo tutorial. Alguma ideia de como ativar o CORS no gateway de sincronização para máquinas Windows?

    a compilação do commit e8cf146. Posso executar isso em uma máquina Windows?

    Quando tento executar o sync_gateway com a configuração json, ele gera um erro:

    XMLHttpRequest não pode ser carregado http://localhost:4984/todos/_facebook. Nenhum cabeçalho \'Access-Control-Allow-Origin\' está presente no recurso solicitado. Portanto, a origem \'http://localhost:9000\' não tem permissão de acesso.

    Obrigado,
    Nuthan.

  2. Florion COIFFÉ junho 16, 2015 em 5:33 pm

    Estou usando o Sync Gateway que construí a partir do mestre atual no Github. Ele deve incluir suporte a CORS e PouchDB?
    Para mim, isso não acontece, os navegadores me informam \"Nenhum cabeçalho \'Access-Control-Allow-Origin\' está presente no recurso solicitado\".

    Em meu arquivo config.json, adicionei as linhas CORS:

    \"CORS\": {
    \”Origin\”:[\”http://185.90.50.35:80\”],
    \”LoginOrigin\”:[\”http://185.90.50.35:80\”],
    \"Headers\":[\"Content-Type\"],
    \"MaxAge\": 1728000
    }

    Você tem alguma ideia do motivo?)

  3. O CORS não está funcionando para mim !!!! ainda não há \'Access-Control-Allow-Origin\'
    Alguma solução?

    1. James Nocentini julho 12, 2015 em 12:16 pm

      Você está usando o Sync Gateway 1.1? Você também pode seguir este tutorial para configurar o CORS/PouchDB e as notificações Web Push https://github.com/couchbasela.... Informe-me se isso ainda não estiver funcionando para você.

  4. No vídeo, você tem um navegador aberto com uma página da Web. Ela faz parte do Sync Gateway? Você precisa instalá-lo separadamente?
    Tentei acessá-lo, mas só obtive erros 404.
    Agradecimentos

    1. Não importa. A interface de administração só aceita conexão de 127.0.0.1

  5. Oi James

    O CORS não está funcionando para mim.
    ERRO:
    XMLHttpRequest não pode carregar . A resposta à solicitação de preflight não passa na verificação de controle de acesso: O cabeçalho \'Access-Control-Allow-Origin\' contém o valor inválido \'\'. Portanto, o acesso à origem não é permitido.

    Na sincronização, a solicitação tem o URL local como \'ORIGIN\' e o gateway como \'HOST\'. Mas o cabeçalho de resposta > \'Access-Control-Allow-Origin\'> é nulo e a solicitação está lançando um 204 No Content .

    O Gateway de sincronização também foi configurado para ORIGEM específica / Todos os URLs, mas continua apresentando o mesmo problema.

  6. Erros de CORS aqui também. Publiquei a seguinte pergunta no StackOverflow, caso alguém tenha tempo para dar uma olhada:

    http://stackoverflow.com/quest

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.