Design de aplicativos

Fonte do Projeto JS do Centro-Oeste em Desenvolvimento de Node Full Stack, disponível

Em agosto, eu havia participado do Midwest JS localizado em Minneapolis, Minnesota. Como você deve saber, sou um grande fã do desenvolvimento de aplicativos de pilha completa com a pilha JavaScript. Foi exatamente sobre isso que me apresentei na conferência.

Minha sessão teve uma boa participação e muitos desenvolvedores aprenderam a usar o Node.js com o Couchbase para desenvolver uma API RESTful e o Angular como a camada voltada para o cliente.

Couchbase at Midwest JS

Conforme prometido, vou revisitar o material que abordei durante a apresentação para que os conceitos e o código possam ser reproduzidos e ampliados.

Daqui para frente, a suposição é que você tem Servidor Couchbase, Node.jse o Estrutura iônica CLI instalado e configurado. O Couchbase será o banco de dados NoSQL, o Node.js alimentará nosso back-end e a estrutura Ionic nos fornecerá um front-end da Web alimentado pelo Angular.

O projeto criado na Midwest JS permitia armazenar informações sobre consoles de videogame e jogos de videogame para vários consoles. Isso demonstrou o uso de CRUD, bem como as relações entre documentos NoSQL e como o Couchbase facilita isso.

Criação do back-end Node.js com Couchbase NoSQL

Antes de iniciarmos o desenvolvimento, precisamos criar um novo projeto Node.js. Na linha de comando, execute o seguinte:

O comando acima criará um projeto package.json e instalar as dependências do nosso projeto. O arquivo cors nos permitirá usar o Node e o Angular localmente em duas portas diferentes sem receber erros de compartilhamento de recursos entre origens. O pacote uuid nos permitirá gerar cadeias de caracteres exclusivas para uso como chaves de documentos. O pacote analisador de corpo nos permitirá enviar dados JSON em solicitações HTTP. Usaremos o Express e o Couchbase, o que explica os outros dois pacotes.

Criar um app.js em seu projeto. Ele conterá todo o código-fonte do nosso aplicativo Node.js. Como padrão, ele deve se parecer com o seguinte:

Observe que importamos cada uma das dependências baixadas, inicializamos e configuramos o Express e nos conectamos a um Bucket em nosso cluster do Couchbase.

Teremos cinco endpoints de API RESTful diferentes para esse aplicativo.

A primeira coisa lógica a fazer seria criar um console de videogame para podermos adicionar jogos a ele. Dê uma olhada no código do endpoint a seguir:

Na lógica acima, estamos validando que a título existe em nossa solicitação. Se existir, geraremos um novo ID, atribuiremos um tipo para os dados em nossa solicitação e os insere no Couchbase. A resposta de sucesso ou falha da inserção será retornada ao cliente, que eventualmente será um aplicativo Angular.

Para consultar os consoles de videogame, precisaremos consultar com base no tipo propriedade. Por esse motivo, teremos que usar uma consulta N1QL em vez de uma pesquisa por id.

A consulta N1QL nada mais é do que um simples SELECIONAR que você encontraria no SQL. Depois de executar a consulta, retornamos a resposta para o cliente.

Isso nos leva aos videogames reais. As coisas ficam um pouco mais complexas, mas não mais difíceis.

Na lógica do endpoint acima, planejamos inserir um novo videogame no banco de dados. Isso não é diferente do que vimos ao inserir um novo console de videogame no banco de dados. Estamos definindo um tipo mas também estamos nos certificando de que uma propriedade cid existe. O cid será um ID de console que nos permitirá estabelecer uma relação com nossos dados.

Quando você tem relacionamentos, você tem JUNTAR operações.

No endpoint acima, estamos fazendo outra consulta N1QL, mas desta vez temos um JUNTAR operação. Não é útil retornar um cid ao consultar jogos de vídeo, portanto JUNTAR e substitua essas informações pelo título do console do outro documento.

Da mesma forma, temos uma consulta semelhante quando tentamos encontrar um videogame específico:

A alternativa ao uso do N1QL e do JUNTAR seria fazer duas pesquisas com base no ID. Não há nada de errado com essa prática, mas, na minha opinião, é mais fácil deixar que o banco de dados cuide de um JUNTAR em vez de tentar JUNTAR por meio da camada de aplicativos.

Isso nos leva ao front-end do cliente.

Criação da estrutura Ionic com front-end angular

Como mencionado anteriormente, desta vez estamos usando o Ionic Framework, que usa uma variante do Angular. Escolhi esse framework porque estava com preguiça de criar um frontend atraente com o Bootstrap ou o Foundation.

Com a CLI do Ionic Framework disponível, execute o seguinte:

O comando acima criará um projeto chamado pwa usando a estrutura Ionic sidemenu modelo.

O modelo básico é útil, mas não tem tudo o que precisamos. Precisamos adicionar algumas páginas ao aplicativo.

Usando os geradores do Ionic Framework, ou manualmente, crie um consoles, jogose jogo página. Cada uma dessas páginas deve ter um arquivo HTML, SCSS e TypeScript e cada diretório de página deve estar no diretório páginas diretório.

Abra o arquivo app/app.component.ts e faça com que ele se pareça com o seguinte:

Observe que importamos Página de jogos e ConsolesPágina, atualizou o páginas e definir a página raiz padrão como Página de jogos. Ao fazer isso, configuramos a navegação e a página padrão quando o aplicativo é iniciado.

Para concluir a configuração, também precisamos alterar o arquivo app/app.module.ts arquivo. Faça com que ele se pareça com o seguinte:

Observe que importamos cada uma de nossas novas páginas e as adicionamos à pasta declarações e entryComponents matrizes do @NgModule bloco.

Agora podemos nos concentrar no desenvolvimento do aplicativo e conectá-lo à nossa API.

Abra o arquivo src/pages/games/games.ts e fazer com que ele se pareça com o seguinte. Vamos detalhar o que está acontecendo a seguir.

Dentro do Página de jogos temos uma variável pública chamada jogos. Por ser público, ele será acessível via HTML. Ele conterá todos os jogos retornados do aplicativo Node.js.

Quando a página é carregada, queremos consultar nosso endpoint. Nunca é uma boa ideia fazer isso na seção construtor portanto, em vez disso, usamos o método ionViewDidEnter método. Depois de emitir a solicitação, o resultado é transformado em JSON e, em seguida, carregado em nossa variável pública.

Se quisermos criar um novo jogo em nosso banco de dados, as coisas serão um pouco diferentes. Vamos exibir uma caixa de diálogo modal e coletar informações.

O criar exibirá nosso método Página do jogo que estará no formato modal. Todos os dados inseridos no formulário no modal serão retornados ao Página de jogos e enviado por meio de uma solicitação HTTP para a API.

Antes de darmos uma olhada em Página do jogoVamos dar uma olhada no HTML que alimenta o Página de jogos.

No HTML acima, estamos percorrendo nosso arquivo público jogos matriz. Cada objeto da matriz é renderizado na tela dentro de uma lista. O Angular faz todo o trabalho pesado para nós.

Abra o arquivo src/pages/game/game.ts e inclua o seguinte:

Essa lógica modal é semelhante ao que já vimos. Haverá um formulário vinculado a HTML e TypeScript. Quando o ionViewDidEnter acionadores, consultamos as informações do console. Essas informações do console serão eventualmente usadas para uma lista de opções que o usuário pode selecionar.

Quando o usuário seleciona o salvar os dados vinculados no formulário público são passados para o método Página de jogos página.

O HTML que alimenta esse modal, encontrado em src/pages/game/game.html se parece com isso:

Temos uma lista simples que compõe nosso formulário. Os elementos do formulário são vinculados à nossa variável TypeScript e as informações do console são percorridas para preencher um arquivo HTML selecionar elemento.

Isso nos leva à página final do front-end do Angular.

Abra o arquivo src/pages/consoles/consoles.ts e inclua o seguinte:

Embora não seja muito diferente do que já vimos, temos um novo recurso. Estamos usando uma caixa de diálogo pop-up para coletar informações sobre o novo console de videogame.

Quando o pop-up é descartado, o seguinte é executado:

Isso pegará as informações encontradas no formulário e as enviará via HTTP para a nossa API, que, por sua vez, salvará as informações do console no banco de dados.

Incrível, não é?

O HTML encontrado na pasta src/pages/consoles/consoles.html é parecido com o seguinte:

Novamente, ele é quase idêntico aos outros arquivos HTML que vimos.

Conclusão

Você acabou de receber uma recapitulação de tudo o que foi abordado no Midwest JS 2017. Vimos como criar uma API do Node.js que se comunica com o Couchbase, nosso banco de dados NoSQL, além de criar um frontend usando o Angular e o Ionic Framework. Esses são apenas alguns componentes de um aplicativo de pilha completa.

Para obter mais informações sobre usando Node.js com o Couchbase, confira o Portal do desenvolvedor do Couchbase. Se você quiser que eu volte ao Midwest JS, avise-me nos comentários.

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

Author

Posted by Nic Raboy

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.

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.