‫Instructor: Ahora tomemos un
‫pequeño descanso de la construcción de
‫nuestra API y creemos un pequeño
‫script divertido que importará los datos del recorrido desde nuestro
‫archivo JSON a la base de datos MongoDB.
‫Y no estaba
‫realmente seguro de si debería incluir este video
‫en el curso o si debería venir con
‫el guión ya en los archivos de inicio del curso.
‫Pero pensé que era un pequeño ejercicio agradable, así que
‫lo incluí de todos modos.
‫De todos modos, comencemos ahora.
‫Entonces, básicamente, crearemos un script que
‫simplemente cargará los datos del archivo JSON como acabo
‫de decir en la base de datos.
‫Y este script es completamente
‫independiente del resto de nuestra aplicación express.
‫Entonces, ejecutaremos esto completamente por separado
‫de la línea de comentarios solo para importar todo una vez.
‫Bien, déjeme crear el script
‫aquí mismo en la carpeta de datos.
‫Entonces, nuevo archivo,
‫importación,
‫datos de desarrollo. js.
‫Está bien.
‫Entonces, ¿qué vamos a necesitar para esto?
‫Necesitaremos mangostas, por supuesto,
‫así que comencemos con eso.
‫O en realidad, vayamos al servidor. js y copie todo
‫esto porque
‫¿por qué escribirlo todo de nuevo?
‫Copiemos todo y luego
‫borremos lo que no necesitamos.
‫Entonces no necesitamos nuestra aplicación express, también
‫necesitamos el. env porque
‫necesitamos nuestras variables de entorno
‫para poder conectarnos a la base de datos nuevamente, está bien.
‫Y necesitamos volver a conectarnos a la base de
‫datos en este script porque se ejecuta de forma completamente
‫independiente de la aplicación express.
‫Solo se ejecutará una vez al principio.
‫A continuación, necesitamos acceso al módulo del sistema de archivos porque,
‫por supuesto, queremos leer el archivo JSON.
‫Entonces, requerimos fs y
‫finalmente también necesitamos acceso al modelo de recorrido porque
‫el modelo
‫de recorrido es donde queremos escribir los recorridos, ¿verdad?
‫Entonces, el recorrido es
‫igual y ahora encontremos el camino
‫allí, así que desde el lugar donde
‫estamos ahora tenemos que subir un nivel.
‫¿Y qué está pasando aquí con estas citas?
‫Muy bien, un nivel
‫arriba y estamos en datos de desarrollo.
‫Entonces necesitamos otro nivel para estar
‫en la carpeta principal.
‫Y de ahí pasamos a los modelos y
‫al modelo de gira.
‫Está bien y eso debería ser todo para la configuración.
‫Ahora comencemos leyendo el archivo.
‫Entonces, lea el archivo JSON y eso
‫debería ser bastante simple.
‫Entonces los tours están en fs. readfile y, por
‫supuesto, podemos usar la versión sincrónica.
‫Y digamos simplemente recorridos sencillos. json, está bien.
‫Y
‫luego, también la codificación.
‫Entonces, codificación de archivos, utf ocho.
‫Dale una oportunidad.
‫Y ahora podemos escribir la función real
‫que importará los datos a la base de datos.
‫Así que importe datos a la base de datos.
‫Está bien, así.
‫Y entonces creemos esta función.
‫Importar datos, importar datos,
‫sí.
‫Y esa será
‫una función asíncrona que no necesita
‫ningún argumento, así que usemos nuevamente un bloque try catch aquí.
‫Y aquí simplemente lo registraré en la consola si
‫hay algún error,
‫solo para saber qué está pasando en ese caso.
‫Y ahora
‫aquí lo que haremos es muy sencillo.
‫Simplemente vamos
‫a esperar, gira. crear.
‫Entonces ya usamos tour. creamos y
‫pasamos luego un objeto en ese entonces, ¿no?
‫Pero el método de creación también puede aceptar una matriz de objetos.
‫Y en ese
‫caso, simplemente creará un nuevo documento para cada
‫uno de los objetos de la matriz.
‫Entonces, muy simple,
‫todo lo que tenemos que hacer es especificar los datos de nuestros recorridos aquí, ¿verdad?
‫Y en realidad no es 100% correcto
‫porque recuerda que esto es JSON.
‫Entonces, primero debemos convertirlo en un
‫objeto JavaScript usando json. analizar gramaticalmente.
‫De acuerdo, ahora tenemos una matriz
‫de objetos JavaScript
‫que ahora podemos pasar al método de creación, de acuerdo.
‫Y si eso
‫tuvo éxito, entonces se ejecutará
‫la siguiente línea y aquí podemos decir que los datos
‫se cargaron correctamente, de acuerdo.
‫Y esto ya debería hacer el trabajo.
‫Ahora, ¿qué pasa con los datos que ya están en la base de datos?
‫También podemos crear una manera
‫fácil de eliminar básicamente todos esos datos al mismo tiempo.
‫Así que simplemente sigamos adelante y hagamos eso también.
‫Entonces, elimine todos los datos
‫de la recopilación, digamos.
‫Y este extraño color amarillo que ves
‫aquí en realidad proviene de una extensión que instalé aquí.
‫Y para deshacerme de eso,
‫simplemente escribiré la base de datos de nuevo, de acuerdo.
‫Así que elimine los
‫datos y nuevamente esta será una función asincrónica sin
‫ningún argumento.
‫Y déjame copiar este código aquí.
‫Entonces, elimínelo
‫y ahora acerca de la
‫eliminación en sí, podemos usar la función eliminar muchos.
‫De acuerdo, y de hecho
‫les mostré este en la introducción a MongoDB, ¿verdad?
‫Donde podríamos usar eliminar muchos
‫y luego simplemente no pasar nada allí
‫y eso
‫eliminaría todos los documentos en una determinada colección, ¿verdad?
‫Y mangosta básicamente implementó
‫la misma función aquí en el modelo, de acuerdo.
‫Entonces, en
‫este caso, el modelo de viaje tiene acceso a este método
‫de eliminación de muchos
‫que luego hará exactamente lo mismo que eliminar muchos en MongoDB nativo, ¿verdad?
‫Entonces, recuerde que la mangosta es
‫solo una, como una capa de abstracción sobre MongoDB.
‫Es por eso que no usa exactamente las mismas
‫funciones, pero aún nos da acceso a algunas similares o
‫que en realidad tienen el mismo nombre.
‫Entonces, eliminar muchos en realidad tiene
‫el mismo nombre que la función nativa de MongoDB, ¿de acuerdo?
‫De nuevo, lo que va a hacer es
‫simplemente continuar y eliminar todos los documentos de la colección de recorridos.
‫Entonces, tenemos nuestras dos funciones aquí,
‫pero si ahora ejecutamos este archivo,
‫no sucederá nada.
‫Y eso es
‫porque no estamos llamando a ninguna de estas funciones en ningún lado, ¿verdad?
‫Ahora podríamos
‫seguir adelante y simplemente escribir algo como importar datos aquí y luego
‫simplemente llamar a la función aquí,
‫pero quería hacer esto un poco más divertido.
‫Así que ahora aprendamos un poquito sobre
‫la interacción con la línea de comandos, está bien.
‫Y entonces voy a
‫seguir adelante y ejecutar este archivo sin llamar a ninguna de estas funciones.
‫Pero en su lugar voy a
‫iniciar sesión en el proceso de la consola. argv, está bien.
‫Solo para que podamos ver qué proceso. argv en realidad lo
‫es para que podamos usarlo.
‫Está bien.
‫Permítanme abrir aquí otra terminal y luego
‫usaré el nodo, entraré
‫en datos de desarrollo, luego
‫en
‫datos y luego importaré datos de desarrollo.
‫Y obtenemos algunos errores aquí.
‫Veamos dónde.
‫Ah, sí, es por esto, por este
‫nombre de archivo.
‫Así que supongo que deberíamos especificar la ruta hasta allí básicamente.
‫Así que ejecutemos este una y
‫otra vez tenemos este error.
‫Y sí, por supuesto que recibo este error.
‫Eso es estúpido.
‫Recuerde cómo le
‫dije que este punto aquí siempre es relativo a la carpeta
‫donde se inició la aplicación de nodo.
‫Y esa es la carpeta de inicio.
‫Básicamente, estamos buscando este archivo aquí
‫en la carpeta de inicio, de acuerdo.
‫Entonces, lo que debería usar en su lugar es el nombre del directorio,
‫variable que está disponible para nosotros en todas partes.
‫Así que eso es así.
‫Está bien.
‫Vuelve a
‫guardarlo, limpia la consola y ejecútala de nuevo.
‫Y ahora funciona.
‫Y aquí
‫está el resultado de esta consola. log que tenemos aquí, así que
‫proceso. argv
‫y, básicamente, es una
‫matriz de estos dos argumentos para ejecutar este proceso de nodo.
‫Entonces, aquí es básicamente donde
‫se encuentra el comando de nodo.
‫Entonces, esto es equivalente a
‫este nodo y luego al segundo,
‫por lo que esta ruta a este archivo es en realidad esto aquí, está bien.
‫Así que salgamos de esto
‫aquí y agreguemos una especie de opción aquí.
‫Así que voy
‫a escribir, guiar, importar guiones y
‫estoy seguro de que has visto algo
‫como esto muchas veces antes.
‫Por ejemplo, cuando guardamos un paquete como una dependencia
‫de desarrollo, lo hacemos así.
‫Guarde dev, por lo que usamos
‫el mismo tipo de formato para especificar opciones.
‫De acuerdo, guión, guión
‫y luego cualquier cuerda que pongamos aquí.
‫Y entonces elijo especificar básicamente la opción de
‫importación de esta manera.
‫Y entonces ves que ahora
‫el tercer argumento es la importación de guiones, ¿de acuerdo?
‫Y eso significa que ahora podemos
‫seguir adelante y básicamente usar estos datos
‫aquí
‫para escribir una aplicación de línea de comandos muy simple
‫básicamente que importará los datos cuando especifiquemos esta
‫opción y los eliminará
‫cuando especifiquemos la opción de eliminar, todo ¿Derecha?
‫Entonces, realmente hagamos eso.
‫Entonces,
‫si process. argv y es
‫una
‫matriz y queremos el tercero.
‫Entonces cero, uno, dos.
‫Entonces, si ese elemento es igual a importar bien,
‫entonces queremos ejecutar la importación de datos.
‫¿Derecha?
‫Si...
‫Proceso. argv two es
‫igual, para
‫eliminar, queremos ejecutar eliminar
‫datos.
‫Y eso es.
‫Entonces, eso debería
‫darnos el resultado que estamos buscando.
‫Terminemos esto aquí.
‫Y ahora ejecutemos el comando aquí
‫con eliminar para eliminar todos los datos que tenemos
‫en la base de datos.
‫Así que probemos eso.
‫Está haciendo algo
‫y los datos se han eliminado correctamente.
‫Así que echemos un vistazo a eso ahora.
‫Y si ejecutamos ahora esta ruta para obtener todos los
‫recorridos, entonces de hecho no tendremos resultados.
‫Entonces, todos nuestros tours se han ido.
‫Entonces funcionó.
‫Ahora bien, este proceso aquí básicamente todavía se está ejecutando.
‫Así que arreglemos eso
‫rápidamente, lo cual es bastante fácil.
‫Entonces, ese es uno nuevo que aún no hemos usado.
‫Que es proceso. salir, ¿de
‫acuerdo?
‫Ahora este proceso. exit es una forma agresiva
‫de detener una aplicación,
‫pero en este caso no hay
‫problema porque en realidad es solo un script
‫muy pequeño que estamos ejecutando aquí y no una aplicación real, ¿verdad?
‫Copiemos lo mismo aquí en
‫nuestra función de importación de datos.
‫Y ahora voy a dejarlo.
‫Y solo para demostrar que funciona,
‫lo ejecutaré nuevamente
‫para que los datos se
‫eliminen con éxito y luego salga del proceso.
‫Está bien.
‫Y ahora es el momento de ejecutar la función
‫que nos interesó en primer lugar.
‫Así que con la bandera de importación, básicamente.
‫Entonces la opción de importación.
‫Así que
‫ejecutemos eso y veamos si realmente funciona.
‫Y no fue así.
‫Entonces, ¿por qué es eso?
‫Entonces aquí nos dice que un tour debe tener un tamaño de grupo.
‫Entonces, ¿de dónde viene eso?
‫Y vemos muchos errores de validación aquí.
‫Entonces algo debe haber salido mal aquí.
‫Así que sí,
‫tenemos la imagen de portada, tenemos la descripción del recorrido.
‫Tenemos el precio.
‫Bueno, eso es raro.
‫Tamaño máximo del
‫grupo, déjame comprobar si sucedió algo aquí.
‫De hecho, tenemos nueve giras
‫aquí y creo que nueve es todo lo que tenemos.
‫Entonces, para mí, parece que realmente funcionó.
‫Pero echemos un vistazo rápido a nuestros datos aquí.
‫Entonces, solo para descubrir por qué sucede esto realmente.
‫Entonces, haga un recorrido simple aquí y
‫ya podemos
‫ver, en realidad, el problema que está sucediendo.
‫Entonces tenemos todos
‫estos tours, los originales.
‫Pero luego, de la última
‫sección, tenemos estos
‫tres aquí que agregamos usando nuestra API basada en archivos.
‫Entonces, ¿recuerdas eso?
‫Entonces en ese entonces solo especificamos el nombre, la
‫duración y la dificultad y nada más.
‫Y ahora
‫mismo, nuestro guión está intentando importar estos tres recorridos.
‫Pero, por supuesto, no estamos interesados en
‫ellos en absoluto, así que sigamos adelante y guardemos esto aquí, está bien.
‫Luego salga de este proceso y,
‫en realidad, de este proceso. exit puede estar fuera del
‫bloque try catch y estar simplemente aquí al final de
‫la función.
‫De modo que
‫no importa si hay un error o no, siempre saldrá del proceso.
‫Está bien.
‫Así que eliminemos todo.
‫Muy bien, limpia la consola de nuevo.
‫Ahora importa, y
‫sí.
‫Entonces, los datos se cargaron con éxito.
‫Como de hecho aquí estamos de nuevo.
‫Así que ahora está funcionando al
‫100%, tenemos nuestros datos con los que podemos empezar a
‫trabajar ahora y sí.
‫Nuestro trabajo con este de aquí está hecho.
‫Entonces, una pequeña función agradable, o un pequeño
‫script agradable en realidad.
‫Espero que todo haya tenido sentido para ti
‫y sí, que también haya sido un ejercicio divertido para ti.
‫De todos modos, nos vemos
‫en el siguiente video donde finalmente comenzamos a usar todos estos datos
‫y a mejorar nuestra
‫API implementando un par de características interesantes.