Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programación Backend
● Suelen incluir información que se utiliza para establecer la configuración o los valores
de propiedad de una aplicación.
● En la mayoría de los casos, los argumentos se pasan después del nombre del programa
en su indicador. Un ejemplo de la sintaxis de los argumentos de la línea de comandos se
ve así:
● Los argumentos de la línea de comandos se pasan como cadenas al programa. Los tipos
de datos de cadena se pueden convertir fácilmente a otros tipos de datos dentro de una
aplicación, lo que hace que los argumentos sean muy flexibles.
● Los argumentos de la línea de comandos se utilizan junto con scripts y archivos por
lotes, lo que es útil para las pruebas automatizadas.
Desventajas
● La mayor desventaja de pasar información a través de la línea de comandos es que la
interfaz tiene una curva de aprendizaje pronunciada, por lo que es difícil de usar para la
mayoría de las personas a menos que tengan mucha experiencia en el uso de
herramientas CLI.
● Las aplicaciones de línea de comandos pueden ser difíciles de usar a menos que esté
usando una computadora de escritorio o portátil, por lo que normalmente no se usan en
dispositivos más pequeños como teléfonos o tabletas.
PROCESS.ARGV
Uso de process.argv
1 2 3
● Lo que hace este script es recorrer el process.argv array e imprime los índices, junto con
los elementos almacenados en esos índices. Es muy útil para depurar si alguna vez nos
preguntamos qué argumentos estamos recibiendo y en qué orden.
Usando process.argv
● Para ejecutar el script, en la terminal nos
posicionamos sobre el directorio de ese
archivo y ejecutamos el comando:
● Lo instalamos como:
● Si queremos usar palabras como nombres de atributos, debemos anteponerle un doble guión, y su
valor será el argumento siguiente.
● Si existen valores sueltos que no vienen precedidos por ningún argumento guionado, todos ellos
se agrupan en un array bajo el nombre _ (guión bajo).
Usando minimist
Además también podemos agregar algunas opciones adicionales. Entre ellas, podemos definir algunos
valores por defecto para argumentos que no estén presentes:
Y podemos agregarle algunos alias para renombrar los valores ingresados como argumentos, dándoles
nombres más descriptivos
Realizar una aplicación en Javascript ejecutada a través de Node.JS que al ejecutarse de la siguiente manera:
node main.js 1 2 3
○ https://github.com/yargs/yargs/blob/HEAD/docs/api.md
USANDO YARGS
Tiempo: 5 minutos
USANDO YARGS
Tiempo: 5 minutos
Realizar la operación del desafío anterior, esta vez usando la dependencia YARGS en lugar
de minimist.
☕
BREAK
¡5/10 MINUTOS Y
VOLVEMOS!
VARIABLES DE ENTORNO
¿De qué se trata?
● Las variables de entorno son variables externas a nuestra aplicación que residen en el
sistema operativo o en el contenedor de la aplicación que se está ejecutando. Una
variable de entorno es simplemente un nombre asignado a un valor.
● Por convención, el nombre se escribe con mayúscula y los valores son cadenas de texto,
por ejemplo: PORT=8080.
¿De qué se trata?
● Normalmente, nuestras aplicaciones requieren que se establezcan muchas variables de entorno
para que funcionen. Al confiar en configuraciones externas, nuestra aplicación se puede
implementar fácilmente en diferentes entornos. Estos cambios son independientes de los cambios
en el código, por lo que no requieren que nuestra aplicación sea reconstruida.
● Los datos que cambian según el entorno en el que se ejecuta su aplicación deben configurarse
como variables de entorno. Algunos ejemplos comunes son:
● Ejecutamos como:
Realizar una aplicación en nodeJS que al pasar las siguientes variables de entorno:
Y que al ejecutarlo sin pasar ninguna variable de entorno construya y muestre por pantalla el siguiente objeto:
● Luego, creamos el archivo .env, con las variables de entorno que queremos
definir. Por ejemplo:
FONDO=blanco
FRENTE=negro
Usando dotenv
● Ahora, creamos el archivo config.js, similar al del ejemplo anterior, con el
siguiente código:
require('dotenv').config()
console.log({
fondo,
frente
})
# byn # colores
FONDO=blanco FONDO=verde
FRENTE=negro FRENTE=violeta
Múltiples entornos con dotenv
const path = require('path')
const dotenv = require('dotenv')
● Dotenv nos permite cargar a
traves del método config() y dotenv.config({
path:
el objeto path, el process.env.MODO == 'byn'
console.log({
fondo,
frente
})
IMPLEMENTANDO DOTENV
Tiempo: 5 minutos
IMPLEMENTANDO DOTENV
Tiempo: 5 minutos
● Ejemplo de ruta:
‘process.stdout.write’
● La propiedad process.stdout devuelve una secuencia conectada a
stdout.
● Es un stream de escritura para stdout.
● Una ventaja de esto es que permite atender mayor demanda con menos recursos.
● El hilo principal podrá estar atento a solicitudes, pero una vez que se atiendan, Node
podrá levantar de manera interna otros procesos para realizar todo tipo de acciones que
se deban producir como respuesta a esas solicitudes. Estos procesos secundarios
pueden crearse con el módulo child_process.
Proceso hijo
● Un proceso hijo es un proceso creado por un proceso padre.
● Node nos permite ejecutar un comando del sistema dentro de un proceso hijo
y escuchar su entrada / salida.
● Los desarrolladores crean de forma habitual procesos secundarios para
ejecutar comandos sobre su sistema operativo cuando necesitan manipular el
resultado de sus programas Node con un shell.
● Podemos crear procesos hijo de 4 formas diferentes:
exec( ) spawn( )
execFile( ) fork( )
FORMAS DE CREAR
PROCESOS HIJO
Proceso secundario con ‘exec( )’.
● Requerimos el comando exec del
módulo child_process.
● En la ejecución de la función exec, el
primer argumento es el comando ls-lh.
Este, enumera todos los archivos y
carpetas del directorio actual en formato
largo, con un tamaño total de archivo en
unidades legibles por el ser humano en
la parte superior del resultado.
Proceso secundario con ‘exec( )’.
● El segundo argumento es el callback, el
cual a su vez tiene 3 parámetros.
● Si el comando no se ejecuta, se imprime
el motivo en error.
● Si el comando se ejecutó
correctamente, cualquier dato que
escriba al flujo de resultado estándar se
captura en stdout y cualquier dato que
escriba al flujo error estándar se captura
en stderr.
Proceso secundario con ‘exec( )’.
● Al ejecutar el archivo en la terminal el output será como el que se muestra en
la imagen.
Realizar un servidor en express que contenga una ruta raíz '/' donde se represente la cantidad
de visitas totales a este endpoint (no usar session).
Se implementará otra ruta '/calculo-bloq', que permita realizar una suma incremental de los
números del 0 al 100000 con el siguiente algoritmo.
Child_process con fork
Tiempo: 15 minutos
Comprobar que al alcanzar esta ruta en una pestaña del navegador, el proceso queda en
espera del resultado. Constatar que durante dicha espera, la ruta de visitas no responde hasta
terminar este proceso.
Luego crear la ruta '/calculo-nobloq' que hará dicho cálculo forkeando el algoritmo en un
child_process, comprobando ahora que el request a esta ruta no bloquee la ruta de visitas.
Asegurarse de que una vez finalizado el proceso, el worker se cierra correctamente.
1
4
USANDO EL OBJETO
PROCESS
AGREGAR DOTENV
Formato: link a un repositorio en Github con el proyecto cargado.
Sugerencia: no incluir los node_modules
>> Consigna:
Sobre el proyecto del último desafío entregable, mover todas las claves y credenciales utilizadas a un
archivo .env, y cargarlo mediante la librería dotenv.
La única configuración que no va a ser manejada con esta librería va a ser el puerto de escucha del servidor. Éste
deberá ser leído de los argumento pasados por línea de comando, usando alguna librería (minimist o yargs). En el
caso de no pasar este parámetro por línea de comandos, conectar por defecto al puerto 8080.
Observación: por el momento se puede dejar la elección de sesión y de persistencia explicitada en el código
mismo. Más adelante haremos también parametrizable esta configuración.
USANDO EL OBJETO PROCESS
Formato: link a un repositorio en Github con el proyecto cargado.
Sugerencia: no incluir los node_modules
>> Consigna:
Agregar una ruta '/info' que presente en una vista sencilla los siguientes datos:
- Argumentos de entrada - Path de ejecución
- Nombre de la plataforma (sistema operativo) - Process id
- Versión de node.js - Carpeta del proyecto
- Memoria total reservada (rss)
USANDO EL OBJETO PROCESS
Formato: link a un repositorio en Github con el proyecto cargado.
Sugerencia: no incluir los node_modules
>> Consigna:
Agregar otra ruta '/api/randoms' que permita calcular un cantidad de números aleatorios en el
rango del 1 al 1000 especificada por parámetros de consulta (query).
Por ej: /randoms?cant=20000.
Si dicho parámetro no se ingresa, calcular 100.000.000 números.
El dato devuelto al frontend será un objeto que contendrá como claves los números random
generados junto a la cantidad de veces que salió cada uno. Esta ruta no será bloqueante
(utilizar el método fork de child process). Comprobar el no bloqueo con una cantidad de
500.000.000 de randoms.