Ratnopam Chakrabarti é um desenvolvedor de software que trabalha atualmente para a Ericsson Inc. Ele tem se concentrado em IoT, tecnologias máquina a máquina, carros conectados e domínios de cidades inteligentes por um bom tempo. Ele adora aprender novas tecnologias e colocá-las em prática. Quando não está trabalhando, gosta de passar o tempo com seu filho de 3 anos.
Em Parte 1 desta série do blogNa publicação anterior, vimos como podemos armazenar e recuperar metadados de imagens de e para um bucket do Couchbase. Nesta postagem (Parte 2), daremos uma olhada nos recursos "curtir" e mostrar por nome de usuário do aplicativo.
A ideia aqui é usar HTML e jQuery no lado do cliente que interagem com os componentes do nó, como route.js, em execução no lado do servidor. Por exemplo, o seguinte snippet de jQuery fica no lado do cliente e faz uma chamada Ajax para o "URL" que é exposto como um rota dentro do route.js no lado do servidor.
O como é um elemento de âncora no qual, ao clicar, uma nova rota é chamada no aplicativo de nó. Aqui está o snippet:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
$(documento).em('clique', '.like', função(e){ console.registro("Como clicado); var que = $(este); var URL = hospedeiro + '/like/' + que.dados('photoid'); ajax({ url: URL, sucesso:função(dados){ var parseData = JSON.analisar(dados.resposta); que.encontrar('h4').html(parseData.gostos); } }) }) |
O URL é formado anexando '/like/' e o ID da imagem ao campo hospedeiro variável. Quando a chamada Ajax é feita com sucesso, o retorno de chamada de sucesso correspondente analisa a resposta JSON enviada de volta do ponto de extremidade do lado do servidor (routes.js).
A rota correspondente para isso (em routes.js) é mostrada abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
roteador.obter('/like/:id', função(req, res, próxima){ ImageModel.getByDocumentId(req.parâmetros.id, função(erro, resultado){ var jsonFromDB = JSON.stringify(resultado); var docFromDBArr = JSON.analisar(jsonFromDB); var docFromDB = docFromDBArr[0]; var gostos = docFromDB.gostos; // incrementar o like em 1 gostos = gostos + 1; docFromDB.gostos = gostos; ImageModel.salvar(docFromDB, função(erro, resultado) { se(erro) { retorno res.status(400).enviar(erro); } res.status(200).enviar({gostos:docFromDB.gostos}); }) }) }) |
A rota acima atende à chamada do jQuery do lado do cliente e também envia de volta uma resposta HTTP de 200 e um corpo de resposta JSON.
A rota faz uma chamada para o getByDocumentId exposta pelo ImageModel. Essa função, conforme mostrado abaixo, recupera um documento do bucket do Couchbase com base no ID do documento passado como argumento. Depois que o documento é recuperado com êxito, o resultado é analisado e a função "curtidas" é incrementado em 1. O documento atualizado é salvo chamando a função save().
A função getByDocumentId (definida no arquivo recordmodel.js):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/* * Obter um documento específico do Couchbase Server usando uma consulta N1QL parametrizada */ ImageModel.getByDocumentId = função(documentId, retorno de chamada) { var declaração = "SELECT META(photos).id, filename, likes, tags" + "FROM `" + configuração.couchbase.balde + "` AS fotos " + "WHERE META(photos).id = $1"; var consulta = N1qlQuery.fromString(declaração); db.consulta(consulta, [documentId], função(erro, resultado) { se(erro) { retorno retorno de chamada(erro, nulo); } retorno de chamada(nulo, resultado); }); }; |
Mostrar imagens por TagName
Para listar imagens por uma determinada tag, precisamos fazer o seguinte:
- Passa o nome da imagem quando a âncora é clicada
- Use o nome da imagem para filtrar as imagens
O nome da marca é passado pelo seguinte jQquery simples:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$(documento).em('clique', '.showTag', função(e){ var que = $(este); var tagURL = hospedeiro + '/getimages/' + que.dados('tagname'); ajax({ url: tagURL, sucesso:função(dados){ var Lista de imagens = JSON.analisar(dados.resposta); renderImagesByTag (Lista de imagens); } }) }) |
E a rota correspondente:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
roteador.obter('/getimages/:tagname', função(req, res, próxima){ console.registro('inside getimages by tagname'); ImageModel.getImagesByTag(req.parâmetros.tagname, função(erro, resultado){ var jsonFromDB = JSON.stringify(resultado); res.enviar(JSON.stringify(resultado)); }) }) |
O getImagesByTag é descrita a seguir:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
ImageModel.getImagesByTag = função(tagName, retorno de chamada) { var declaração = "SELECT META(photos).id, filename, likes, tags" + "FROM `" + configuração.couchbase.balde + "` AS photos WHERE $1 IN tags"; var consulta = N1qlQuery.fromString(declaração); db.consulta(consulta, [tagName], função(erro, resultado) { se(erro) { retorno retorno de chamada(erro, nulo); } retorno de chamada(nulo, resultado); }); }; |
Ele simplesmente executa a seguinte consulta usando o N1QL:
selecione filename, likes from photogallery where IN tags;
Isso permite a filtragem com base em tagname, onde tags é uma matriz de cadeias de caracteres.
Portanto, se tivermos duas imagens com a mesma tag, a consulta acima deverá retornar as duas imagens.
Aqui, ambos os documentos têm uma tag comum chamada "Blossom." Agora, se executarmos a consulta usando o Couchbase Query Workbench, obteremos o seguinte resultado:
Como esperado, você pode ver que dois registros são retornados. Isso é, na verdade, o que está acontecendo no getImagesByTag () função.
Solução de problemas
Durante a instalação do npm, se você encontrar o seguinte erro,
Não é possível encontrar o executável do Python "python", você pode definir a variável de ambiente PYTHON
faça o seguinte para se livrar do erro:
Instalar o python
Adicionar python ao caminho
Isso deve resolver o erro... pelo menos foi o que aconteceu comigo.
Esta postagem faz parte do Programa de Redação da Comunidade Couchbase