En esta aventura de Node.js, abordaremos la aplicación obligatoria de lista de tareas pendientes. A lo largo del camino, aprenderemos sobre los conceptos bÔsicos de los módulos y cómo usarlos en un entorno Node. Después de eso, exploraremos cómo usar require () para hacer uso tanto de nuestros propios archivos como de los módulos de terceros creados por la comunidad. Necesitaremos ver cómo aceptar la entrada del usuario, asà como hacer uso de JSON para almacenar los datos que componen nuestros elementos de tareas pendientes. Comencemos a poner en funcionamiento nuestra aplicación de lista de tareas pendientes de Node.js ahora.
Ejecute un archivo JavaScript como una aplicación NodeJS
Ya aprendimos cómo escribir algunos comandos en la consola de Node y hacer que sucedan algunas cosas. Ahora, queremos crear archivos JavaScript que se puedan ejecutar como una aplicación Node.js. ¿Cómo podemos hacer esto? Comenzaremos con el ejemplo obligatorio de Hello World. Primero, crearemos un directorio en nuestra mĆ”quina para contener algunos archivos JavaScript.
C: \> nodo mkdir
Ahora, abriremos esa carpeta usando Visual Studio Code, un editor de código fantÔstico y poderoso que también es gratuito. Una vez abierto, continúe y cree un nuevo archivo de app.js como ese.
En el archivo app.js, agregaremos algĆŗn código y guardaremos el archivo si es necesario. (El código de Visual Studio se guardarĆ” automĆ”ticamente en la mayorĆa de los casos)
Ahora tiene una aplicación bĆ”sica de Node.js que estĆ” lista para ejecutarse. SĆ© que apenas puedes contener tu emoción. ¡Ahora podemos ejecutar ese programa!
¡Salvaje! SĆ© que parece trivial, pero acabas de seguir los pasos bĆ”sicos para crear una aplicación Node.js muy bĆ”sica. Creamos un directorio para almacenar nuestros archivos de programa, agregamos algo de código y finalmente ejecutamos el programa. ¡Eso es practicamente todo! Incluso las aplicaciones mĆ”s grandes y complejas comenzarĆ”n con estos primeros pasos simples.
Conceptos bÔsicos del módulo en Node.js
Con nuestro ejemplo de hola mundo abordado, aprendamos un poco sobre los módulos en Node.js. Los módulos son unidades de funcionalidad. En Node hay todo tipo de módulos que puedes utilizar. Algunos lo ayudan a trabajar con el sistema de archivos, otros pueden proporcionar servicios http o servicios DNS.
require () para módulos integrados
Veamos cómo podemos hacer uso de un módulo en Node.js. Considere este código.
En este código, primero hacemos uso de la función require () del nodo. Se utiliza para requerir módulos en Node. La cadena 'fs' que pasamos a require () se carga en el módulo de sistema de archivos integrado de Node . Esto se almacena en el objeto fs, que ahora tiene una gran cantidad de métodos que puede utilizar. Para este ejemplo rÔpido, simplemente usaremos el método fs.appendFile () que agrega datos de forma asincrónica a un archivo, creando el archivo si aún no existe. El primer argumento es el nombre del archivo para escribir. Proporcionamos 'file.txt' como archivo. El siguiente argumento son los datos que se escribirÔn en ese archivo. Por último, debemos incluir una devolución de llamada para manejar cualquier error que pueda ocurrir. Antes de ejecutar el programa, asà es como se ve el código de Visual Studio.
Ahora podemos ejecutar la aplicación desde la lĆnea de comandos escribiendo node app.js
.
C: \ nodo> nodo app.js Los datos se han escrito en file.txt nulo
Una vez finalizado el programa, observe que ahora tenemos un nuevo archivo en nuestro editor de file.txt. Esto se debe a que Node.js acaba de crear el nuevo archivo y le escribió datos. ¡Muy genial!
Continúe y ejecute el programa una vez mÔs, y verÔ que se agrega un segundo conjunto de datos al archivo.
Si lo desea, puede ejecutar este programa 500 veces y almacenar el texto de "Escribiendo en el sistema de archivos". 500 veces en ese archivo de texto file.txt. Por supuesto, eso realmente no tiene sentido, pero ahora tenemos un ejemplo real de trabajo de requerir el fs
módulo en una aplicación Node y escribir datos en el sistema de archivos. ¡Excelente!
require () para tus propios módulos o archivos
Con Node y ES6, es muy fĆ”cil colocar código en archivos separados y luego importarlos segĆŗn sea necesario. Esto limpia drĆ”sticamente su base de código y ayuda a mantener todo organizado de una manera muy ordenada para sus proyectos. A veces creo que la organización de código simple es literalmente la mitad de la batalla en la ingenierĆa de software. Entonces, en el espĆritu de la aplicación de lista de tareas, creemos un nuevo archivo todos.js en nuestro editor y coloquemos el siguiente código en Ć©l.
todos.js
Aquà estamos exportando la función de flecha addTodo () . Simplemente agregamos una declaración de consola al archivo para mostrar cuÔndo se ejecuta este archivo durante la ejecución de la aplicación. Ahora mira esto. En el archivo app.js principal, ahora podemos requerir lo que se ha exportado desde todos.js.
Ejecutar la aplicación nos muestra que todo estÔ funcionando muy bien.
La mayorĆa de las veces, el objetivo de las exportaciones es poder exportar funciones que se utilizan en el archivo app.js principal.
Requerir módulos de terceros en su aplicación de nodo
Ahora queremos aprovechar lo mejor de Node.js. ¡Todo el maravilloso software que ya ha sido escrito para ti! Para hacer uso de módulos de terceros, primero debemos crear un archivo package.json . Podemos hacer esto fĆ”cilmente ejecutando el npm init
comando en la raĆz del proyecto.
c: \ nodo> npm init Esta utilidad lo guiarÔ a través de la creación de un archivo package.json. Solo cubre los elementos mÔs comunes e intenta adivinar valores predeterminados razonables. Consulte lanpm help json
documentación definitiva sobre estos campos. y exactamente lo que hacen. Ćselo luego para instalar un paquete ynpm install
guƔrdelo como una dependencia en el archivo package.json. Presione ^ C en cualquier momento para salir. nombre: (nodo)--save
Como puede ver, comienza como un programa de shell en el que se nos presentan varias preguntas sobre la aplicación que estÔ creando. Asà es como completamos este pequeño cuestionario.
nombre: (nodo) todos-nodo versión: (1.0.0) descripción: punto de entrada: (app.js) comando de prueba: repositorio git: palabras clave: autor: vegibit licencia: (ISC) A punto de escribir en c: \ node \ package.json: { "nombre": "todos-nodo", "versión": "1.0.0", "descripción": "", "main": "app.js", "dependencias": {}, "devDependencies": {}, "guiones": { "prueba": "echo \" Error: no se especificó ninguna prueba \ "&& salida 1" }, "autor": "vegibit", "licencia": "ISC" } ¿Esta bien? (sĆ SĆ c: \ nodo>
Ahora tenemos un archivo package.json en nuestro proyecto. Con este archivo en su lugar, podemos comenzar a agregar módulos de terceros a nuestra aplicación. Comenzaremos agregando la popular biblioteca de utilidades de JavaScript Lodash escribiendo lo siguiente en el sĆmbolo del sistema.
c: \ nodo> npm install lodash --save
Este comando harĆ” un par de cosas por ti. En primer lugar, ahora actualizarĆ” su archivo package.json automĆ”ticamente con la dependencia que acaba de agregar. En segundo lugar, el software NPM se comunicarĆ” con los servidores, tomarĆ” el software que desea usar y lo colocarĆ” en su mĆ”quina en un nuevo directorio llamado node_modules . ¡Echale un vistazo!
Lodash ahora se puede utilizar en su proyecto
Podemos actualizar nuestro archivo app.js principal para incorporar Lodash ahora.
app.js
¡Bingo! Eso es todo lo que se necesita para descargar e instalar un módulo de terceros en su proyecto Node.js. Tienes mĆ”s de seiscientos mil (!) Para elegir, asĆ que diviĆ©rtete.
Reiniciar su aplicación Node.js con nodemon
A medida que construye su aplicación, necesitarĆ” retroceder continuamente y ejecutar manualmente la aplicación desde el terminal. ¡Eso no es realmente divertido, y podemos y debemos automatizar todas las cosas! Para que nuestra aplicación se reinicie automĆ”ticamente despuĆ©s de realizar cambios en nuestros archivos JavaScript, podemos instalar el popular módulo nodemon para que lo haga por nosotros. Sigamos adelante y agreguemos nodemon a nuestra mĆ”quina.
c: \ nodo> npm instalar nodemon -g
Una vez que nodemon estĆ” instalado, ahora puede ejecutar sus aplicaciones escribiendo nodemon <nombre de archivo> en lugar de nodo <nombre de archivo>. Echar un vistazo.
Lo que estĆ” sucediendo ahora es que nodemon ha puesto la aplicación en un estado de ejecución, pero siempre estĆ” monitoreando cualquier cambio. Si se detectan esos cambios, la aplicación se reiniciarĆ” automĆ”ticamente y podrĆ” verla en tiempo real en la terminal. Hagamos un cambio en uno de nuestros archivos de aplicación. Simplemente agregaremos una declaración de registro simple a app.js asĆ.
Si te diriges a la terminal, ¡mira lo que vemos!
[nodemon] reiniciando debido a cambios ... [nodemon] comenzandonode app.js
[nodemon] reiniciando debido a cambios ... Ejecutando app.js Ejecutando todos.js Nuevo Todo creado. ¡Amamos a Nodemon! [nodemon] comenzandonode app.js
Ejecutando app.js Ejecutando todos.js Nuevo Todo creado. ¡Amamos a Nodemon! [nodemon] salida limpia - esperando cambios antes de reiniciar
Nodemon detectó cualquier cambio de inmediato y reinició la aplicación. Le encantarÔ esta conveniencia a medida que desarrolla aplicaciones en Node.js.
Obteniendo entrada de usuario
Ahora finalmente podemos obtener alguna entrada del usuario. Asà es como podremos agregar un elemento de tareas pendientes a la aplicación. Solo queremos configurar algo súper bÔsico. Queremos que el usuario pueda escribir una tarea o un recordatorio en el sistema. Usaremos un módulo de Node.js llamado Yargs para ayudarnos con esto. Primero instalemos Yargs.
c: \ nodo> npm install yargs --save
Una vez que se instala, podemos requerirlo en nuestra aplicación como vemos aquĆ.
Ahora haremos un par de adiciones aquĆ.
En el código anterior, recopilamos los argumentos de la lĆnea de comandos proporcionados a travĆ©s de yargs.argv y los almacenamos en args. Luego, vamos a cerrar la sesión de un argumento de 'todo' accediendo a Ć©l con args.to. Veamos eso en acción.
Como podemos ver si ejecutamos app.js y pasamos algunos argumentos como lo hicimos aquĆ, podemos acceder a ellos dentro del programa. Al escribir node app.js --todo="eat lunch"
, estamos ejecutando app.js y pasando un argumento de todo
y su valor es eat lunch
.
Vamos a querer addTodo, listTodos, readTodo o deleteTodo. Necesitaremos capturar mĆ”s información de la lĆnea de comando para hacer eso. Podemos capturar la entrada de esa manera asĆ:
c: \ nodo> nodo app.js addTodo Ejecutando app.js Ejecutando todos.js Ejecutó el comando: addTodo c: \ nodo> nodo app.js listTodos Ejecutando app.js Ejecutando todos.js Ejecutó el comando: listTodos c: \ nodo> nodo app.js readTodo Ejecutando app.js Ejecutando todos.js Ejecutó el comando: readTodo c: \ nodo> nodo app.js deleteTodo Ejecutando app.js Ejecutando todos.js Ejecutó el comando: deleteTodo
Simplemente incluyendo el nombre del comando despuƩs de inicializar app.js, podemos ver que hemos capturado esa entrada y la estamos enviando a la consola.
Usar JSON para administrar datos
Necesitamos tener una forma de almacenar esos elementos de tareas pendientes en nuestra aplicación para que no se vayan flotando al abismo. Podemos hacer esto con JSON. Podemos comenzar configurando una forma de agregar un elemento de tarea.
Agregar un Todo
En primer lugar, actualice el archivo app.js asĆ.
Ahora necesitamos agregar algo de lógica al archivo todos.js para agregar realmente un elemento a un objeto de datos JSON.
Ok, creo que podemos ejecutar el programa. AquĆ va:
c: \ node> node app.js addTodo --title = "Cortar el césped" Ejecutando app.js Iniciando todos.js Comando en ejecución: addTodo
Si busca en Visual Studio Code, verĆ” un nuevo archivo allĆ. Inspeccionar ese archivo nos muestra que la tarea que acabamos de agregar al sistema ahora estĆ” almacenada en ese archivo todos-data.json. ¡Frio!
Agregaremos algunos elementos mƔs.
c: \ node> node app.js addTodo --title = "Ir a trabajar" Ejecutando app.js Iniciando todos.js Comando en ejecución: addTodo c: \ node> node app.js addTodo --title = "Leer el documento" Ejecutando app.js Iniciando todos.js Comando en ejecución: addTodo c: \ node> node app.js addTodo --title = "Netflix y relajarse" Ejecutando app.js Iniciando todos.js Comando en ejecución: addTodo
Efectivamente, nuestro archivo de datos json se estĆ” actualizando.
Las funciones que estƔn haciendo el trabajo pesado por nosotros son las siguientes.
readFileSync
Lee sincrónicamente todo el contenido de un archivo.
- @param path
Una ruta a un archivo. Si se proporciona una URL, debe utilizar el archivo: protocolo. La compatibilidad con URL es experimental. Si se proporciona un descriptor de archivo, el archivo subyacente no se cerrarƔ automƔticamente. - Opciones de @param: un objeto que puede contener una bandera opcional. Si no se proporciona una bandera, el valor predeterminado es 'r'.
JSON.parse
Convierte una cadena de notación de objetos JavaScript (JSON) en un objeto.
- @param text: una cadena JSON vƔlida.
- @param reviver
Una función que transforma los resultados. Esta función se llama para cada miembro del objeto. Si un miembro contiene objetos anidados, los objetos anidados se transforman antes que el objeto principal.
writeFileSync
Escribe datos de forma sincrónica en un archivo, reemplazando el archivo si ya existe.
- @param path
Una ruta a un archivo. Si se proporciona una URL, debe utilizar el archivo: protocolo. La compatibilidad con URL es experimental. Si se proporciona un descriptor de archivo, el archivo subyacente no se cerrarƔ automƔticamente. - @param data: los datos que se van a escribir. Si se proporciona algo que no sea Buffer o Uint8Array, el valor se convierte en una cadena.
- Opciones de @param
O la codificación del archivo o un objeto que especifica opcionalmente la codificación, el modo de archivo y la marca. Si no se proporciona la codificación, se utiliza el valor predeterminado de 'utf8'. Si no se proporciona el modo, se utiliza el valor predeterminado 0o666. Si el modo es una cadena, se analiza como un entero octal. Si no se proporciona el indicador, se utiliza el valor predeterminado 'w'.
JSON.stringify
Convierte un valor de JavaScript en una cadena de notación de objetos de JavaScript (JSON).
- @param value: un valor de JavaScript, generalmente un objeto o matriz, que se va a convertir.
- @param replacer - Una función que transforma los resultados.
- @param space: agrega sangrĆa, espacios en blanco y caracteres de salto de lĆnea al texto JSON de valor de retorno para facilitar la lectura.
Eliminar un elemento de Todo
Ahora agreguemos la lógica para eliminar un elemento de tarea del almacén de datos JSON. Nuestros archivos todos.js y app.js actualizados se encuentran a continuación.
todos.js
app.js
Ahora podemos ejecutar el programa pasando un tĆtulo que sabemos que existe y uno que no para confirmar que todo funciona correctamente.
c: \ node> node app.js deleteTodo --title = "Netflix y relÔjate" Ejecutando app.js Iniciando todos.js Comando en ejecución: deleteTodo Todo fue eliminado c: \ node> node app.js deleteTodo --title = "Ver Pulp Fiction" Ejecutando app.js Iniciando todos.js Comando en ejecución: deleteTodo Todo no encontrado
Leer un artĆculo de Todo
Esta iteración agregarĆ” la capacidad de simplemente leer un elemento de tarea pendiente cuando pasamos el tĆtulo de ese elemento de tarea.
app.js
todos.js
¡ProbĆ©moslo! ¡Parece que estĆ” funcionando!
c: \ node> node app.js readTodo --title = "Cortar el cĆ©sped" Ejecutando app.js Iniciando todos.js Comando en ejecución: readTodo ¡Excelente! Se encontró el todo. ------ Su tĆtulo es: Corta el cĆ©sped c: \ node> node app.js readTodo --title = "Netflix y relajarse" Ejecutando app.js Iniciando todos.js Comando en ejecución: readTodo ¡Ups! No se encontró la tarea.
Listado de todos los elementos de Todo
Por último, queremos tener la capacidad de enumerar todos los elementos de la aplicación. Eche un vistazo a la versión final de todos.js y app.js que agregan soporte para esto.
todos.js