‫Instrutor: Agora vamos fazer
‫uma pequena pausa na construção de
‫nossa API e construir um pequeno
‫script divertido que importará os dados do tour de nosso
‫arquivo JSON para o banco de dados MongoDB.
‫E eu não
‫tinha certeza se deveria incluir este
‫vídeo no curso ou se deveria apenas vir
‫com o roteiro já nos arquivos iniciais do curso.
‫Mas eu achei que era um pequeno exercício legal e então
‫eu o incluí de qualquer maneira.
‫Então, de qualquer maneira, vamos começar agora.
‫Então, basicamente, vamos criar um script
‫que simplesmente carregará os dados do arquivo JSON
‫como eu disse no banco de dados.
‫E este script é completamente
‫independente do resto de nosso aplicativo expresso.
‫E então vamos executar isso completamente separadamente
‫da linha de comentários apenas para importar tudo de uma vez.
‫Ok, então deixe-me criar o
‫script bem aqui na pasta de dados.
‫Então, novo arquivo,
‫importação,
‫dados de desenvolvimento. js.
‫Tudo bem.
‫Então, o que vamos precisar para isso?
‫Vamos precisar do mangusto, é
‫claro, então vamos começar com isso.
‫Ou, na verdade, vamos prosseguir para o servidor. js arquivo e copie
‫essas coisas porque
‫por que escrever tudo de novo.
‫Então, vamos copiar tudo
‫e excluir o que não precisamos.
‫Portanto, não precisamos de nosso aplicativo expresso,
‫também precisamos do. pacote env
‫porque precisamos de nossas variáveis
‫de ambiente para podermos nos conectar ao banco de dados novamente, ok.
‫E precisamos nos conectar ao banco de dados
‫neste script novamente porque ele é executado de forma
‫completamente independente do aplicativo expresso.
‫Só vai funcionar uma vez no início.
‫Em seguida, precisamos acessar o módulo do sistema de arquivos porque
‫é claro que queremos ler o arquivo JSON.
‫Portanto, exija fs e,
‫finalmente, também precisamos de acesso ao modelo de passeio, porque
‫o modelo
‫de passeio é onde queremos escrever os passeios, certo?
‫Então, o tour é
‫igual e agora vamos encontrar o
‫caminho até lá, então, do lugar
‫onde estamos agora, precisamos subir um nível.
‫E o que está acontecendo aqui com essas citações?
‫Tudo bem, então um nível
‫acima e estamos com dados de desenvolvimento.
‫Portanto, precisamos de outro nível para cima para que
‫possamos estar na pasta principal.
‫E a partir daí vamos para os modelos e
‫para o modelo de turismo.
‫Ok e isso deve ser para a configuração.
‫Agora vamos começar lendo o arquivo.
‫Portanto, leia o arquivo JSON e isso
‫deve ser bastante simples.
‫Portanto, os passeios estão em fs. readfile e podemos
‫usar a versão síncrona, é claro.
‫E vamos simplesmente dizer passeios simples. json, ok.
‫E
‫então, também a codificação.
‫Portanto, codificação de arquivo, utf oito.
‫Dê uma chance.
‫E agora podemos escrever a função real que
‫vai importar os dados para o banco de dados.
‫Portanto, importe os dados para o banco de dados.
‫Ok, assim.
‫E então vamos criar esta função.
‫Importar dados, importar dados,
‫sim.
‫E isso vai ser
‫uma função assíncrona que não precisa
‫de nenhum argumento, então vamos usar novamente um bloco try catch aqui.
‫E aqui vou simplesmente registrá-lo no console se houver
‫algum erro,
‫apenas para saber o que está acontecendo nesse caso.
‫E agora
‫aqui, o que faremos é muito simples.
‫Vamos
‫simplesmente esperar, tour. crio.
‫Então já usamos a turnê. criamos e
‫passamos então um objeto de volta, certo?
‫Mas o método de criação também pode aceitar uma série de objetos.
‫Nesse caso,
‫ele simplesmente criará um novo documento para
‫cada um dos objetos do array.
‫Então, muito simples,
‫tudo o que temos que fazer é especificar os dados dos nossos tours aqui, certo?
‫E, na verdade, não está 100% correto, porque
‫lembre-se de que se trata de JSON.
‫E então precisamos primeiro convertê-lo realmente em
‫um objeto JavaScript usando json. parse.
‫Ok, agora temos uma matriz
‫de objetos JavaScript
‫que podemos passar para o método de criação, ok.
‫E se foi
‫bem sucedido, então a próxima
‫linha será executada e aqui podemos dizer que os dados
‫foram carregados com sucesso, certo.
‫E isso já deve funcionar.
‫Agora, o que acontece com os dados que já estão no banco de dados?
‫Também podemos criar uma maneira
‫fácil de excluir basicamente todos os dados ao mesmo tempo.
‫E então vamos simplesmente seguir em frente e fazer isso também.
‫Portanto, exclua todos os dados
‫da coleta, digamos.
‫E essa cor amarela estranha que você
‫vê aqui, na verdade, vem de uma extensão que instalei aqui.
‫E então, para me livrar
‫disso, simplesmente irei escrever banco de dados novamente, ok.
‫Portanto, exclua os dados
‫e, novamente, esta será uma função assíncrona sem
‫nenhum argumento.
‫E deixe-me realmente copiar este código aqui.
‫Portanto, exclua-o
‫e agora sobre a exclusão
‫em si, podemos usar a função delete many.
‫Ok, na verdade eu
‫mostrei esse aqui na introdução do MongoDB, certo?
‫Onde poderíamos usar delete many
‫e então simplesmente passar nada lá dentro
‫e isso
‫excluiria todos os documentos em uma determinada coleção, certo?
‫E então o mangusto
‫basicamente implementou a mesma função aqui no modelo, ok.
‫Portanto, neste
‫caso, o modelo de passeio tem acesso a este
‫método delete many, que
‫fará exatamente o mesmo que delete many no MongoDB nativo, certo?
‫Portanto, lembre-se de que o mongoose é apenas
‫um, como uma camada de abstração no topo do MongoDB.
‫É por isso que não usa exatamente as mesmas funções,
‫mas ainda nos dá acesso a algumas semelhantes ou a outras
‫que na verdade têm o mesmo nome.
‫Portanto, delete muitos realmente têm
‫o mesmo nome que a função nativa do MongoDB, certo?
‫Novamente, o que isso fará é simplesmente seguir
‫em frente e excluir todos os documentos da coleção de passeios.
‫Portanto, temos nossas duas funções aqui,
‫mas se agora realmente executarmos este
‫arquivo, nada acontecerá.
‫E isso
‫porque não estamos chamando nenhuma dessas funções em lugar nenhum, certo?
‫Agora poderíamos
‫prosseguir e simplesmente escrever algo como importar dados aqui e, em seguida,
‫simplesmente chamar a função aqui, mas
‫eu queria tornar isso um pouco mais divertido.
‫Então, vamos aprender um pouquinho sobre
‫como interagir com a linha de comando, certo.
‫E então vou
‫prosseguir e executar este arquivo sem chamar nenhuma dessas funções.
‫Mas, em vez disso,
‫vou entrar no processo do console. argv, ok.
‫Só para vermos qual é o processo. argv, na verdade,
‫é para que possamos usá-lo.
‫Tudo bem.
‫Deixe-me abrir aqui outro terminal e
‫então usarei o node,
‫entrarei em dev data e
‫depois
‫em data e então importarei dev data.
‫E temos alguns erros aqui.
‫Vamos ver onde.
‫Ah, sim, é por causa disso, desse
‫nome de arquivo.
‫Então, acho que devemos especificar o caminho para lá basicamente.
‫Então, vamos executar este novamente e
‫novamente temos este erro.
‫E sim, claro que recebo este erro.
‫Isso é estúpido.
‫Lembre-se de como eu
‫disse a você que este ponto aqui é sempre relativo à pasta
‫onde o aplicativo do nó foi realmente iniciado.
‫E essa é a pasta de início.
‫Basicamente, estamos procurando por esse
‫arquivo aqui na pasta de início, certo.
‫Portanto, o que devo usar em vez disso é o nome do dir, variável
‫que está disponível para nós em todos os lugares.
‫Então é assim.
‫Tudo bem.
‫Salve-o novamente,
‫limpe o console e execute-o novamente.
‫E agora funciona.
‫E então
‫aqui está o resultado deste console. log que temos aqui, então
‫processe. argv
‫e basicamente isso é
‫uma matriz desses dois argumentos de execução deste processo de nó.
‫Então, aqui é basicamente onde
‫o comando do nó está localizado.
‫Então, isso equivale a
‫este nó e depois ao segundo,
‫então este caminho para este arquivo é na verdade este aqui, ok.
‫Então, vamos encerrar isso aqui
‫e adicionar uma espécie de opção aqui.
‫Vou escrever,
‫traço, importação de traço e
‫tenho certeza de que você já
‫viu algo assim antes.
‫Por exemplo, quando salvamos um pacote como uma dependência
‫de desenvolvimento, fazemos assim.
‫Salve dev e, portanto, usamos o
‫mesmo tipo de formato para especificar opções.
‫Ok então, traço traço
‫e então qualquer string que colocarmos aqui.
‫E então eu escolho basicamente especificar a opção
‫de importação como esta.
‫E então você vê que
‫agora o terceiro argumento é a importação de travessão, certo?
‫E isso significa que agora podemos
‫ir em frente e basicamente usar esses
‫dados
‫aqui para escrever um aplicativo de linha de comando muito
‫simples, que basicamente importará os dados quando especificarmos esta
‫opção e os excluirá
‫quando especificarmos a opção de exclusão, todos direito?
‫Então, vamos realmente fazer isso.
‫Então,
‫se o processo. argv e é
‫um
‫array e queremos o terceiro.
‫Então, zero, um, dois.
‫Portanto, se esse elemento for igual para importar bem,
‫queremos executar a importação de dados.
‫Direito?
‫Se...
‫Processo. argv dois é
‫igual, para
‫deletar, queremos executar deletar
‫dados.
‫E é isso.
‫Então, isso deve nos
‫dar o resultado que estamos procurando.
‫Vamos terminar isso aqui.
‫E agora vamos executar o comando
‫aqui com delete para deletar todos os dados que
‫temos no banco de dados.
‫Então, vamos experimentar.
‫Ele está fazendo algo
‫e os dados foram excluídos com sucesso.
‫Então, vamos dar uma olhada nisso agora.
‫E se executarmos agora a rota get all tours,
‫então de fato teremos zero resultados.
‫Então, todas as nossas turnês acabaram.
‫Então funcionou.
‫Agora, este processo aqui basicamente ainda está em execução.
‫E então vamos consertar
‫isso rapidamente, o que é bem fácil.
‫Então, esse é um novo que ainda não usamos.
‫Qual é o processo. saia, certo?
‫Agora, este processo. exit é uma forma agressiva
‫de interromper um
‫aplicativo, mas neste caso não é
‫problema porque é apenas um script muito
‫pequeno que estamos executando aqui e não um aplicativo real, certo?
‫Vamos apenas copiar a mesma coisa
‫aqui em nossa função de importação de dados.
‫E agora vou parar.
‫E só para mostrar que funciona,
‫vou executá-lo novamente
‫para que os dados sejam
‫excluídos com sucesso e ele saia do processo.
‫Tudo bem.
‫E agora é hora de realmente executar a função na
‫qual estávamos interessados em primeiro lugar.
‫Então, com o sinalizador de importação, basicamente.
‫Portanto, a opção de importação.
‫Então, vamos
‫rodar isso e ver se realmente funciona.
‫E isso não aconteceu.
‫Então, por que isso?
‫Portanto, aqui nos diz que um tour deve ter um tamanho de grupo.
‫Então de onde isso está vindo?
‫E vemos muitos erros de validação aqui.
‫Portanto, algo deve ter dado errado aqui.
‫Então, sim,
‫temos a imagem da capa, temos a descrição do tour.
‫Temos o preço.
‫Bem, isso é estranho.
‫Tamanho máximo do
‫grupo, deixe-me verificar se algo aconteceu aqui.
‫Na verdade, temos nove turnês
‫aqui e acho que nove é tudo o que temos.
‫E então para mim meio que parece que realmente funcionou.
‫Mas vamos dar uma olhada rápida em nossos dados aqui.
‫Então, só para descobrir por que isso realmente acontece.
‫Então faça um tour simples aqui e
‫já podemos
‫ver, na verdade, o problema que está acontecendo.
‫Então, nós temos todas
‫essas turnês, então as originais.
‫Mas, então, na última seção,
‫temos esses três
‫aqui que meio que adicionamos usando nossa API baseada em arquivo.
‫Então, lembra disso?
‫Naquela época, apenas especificávamos o nome, a duração
‫e a dificuldade e nada mais.
‫E agora
‫nosso script está tentando importar esses três tours.
‫Mas é claro, não estamos interessados
‫neles de forma alguma, então vamos prosseguir e salvar isso aqui, ok.
‫Em seguida, saia desse processo e,
‫na verdade, desse processo. exit pode estar fora do
‫bloco try catch e simplesmente estar aqui no final
‫da função.
‫Para que não
‫importando se houver um erro ou não, sempre será apenas encerrado o processo.
‫Tudo bem.
‫Então, vamos deletar tudo.
‫Tudo bem, limpe o console novamente.
‫Agora importe e
‫sim.
‫Portanto, os dados foram carregados com sucesso.
‫Como de fato aqui estamos nós novamente.
‫Agora está funcionando 100%, temos
‫nossos dados com os quais podemos começar a
‫trabalhar agora, sim.
‫Nosso trabalho com este aqui está concluído.
‫Então, uma pequena função legal, ou um pequeno
‫script legal, na verdade.
‫Espero que tudo tenha feito sentido para
‫você e sim, foi um exercício divertido para você também.
‫De qualquer forma, nos
‫vemos no próximo vídeo, onde finalmente começamos a usar todos esses
‫dados e a melhorar
‫nossa API implementando alguns recursos interessantes.