CURSO DE NODE.JS DESDE CERO: Introducción y primeros pasos

441.9k views25712 WordsCopy TextShare
midulive
Aprende todo lo que necesitas saber sobre Node.js. En esta Capítulo 1, conocerás realmente lo que es...
Video Transcript:
Empezamos el curso práctico de nouji es desde cero vamos a hablar Qué es Note por qué lo tienes que aprender Qué puedes hacer con Note qué no puedes hacer Qué es y qué no es y vamos a empezar a crear nuestros primeros módulos Qué sistemas de módulos hay Cómo podemos utilizar el file System el path http Cómo crear un servidor web esto lo vamos a ver hoy desde cero con el curso práctico de Note 10 desde cero Entonces vamos a empezar a explicar cómo instalar Note y todo esto pero antes una de las cosas para
mí más importantes a la hora de aprender cualquier cosa es explicarte el objetivo y el objetivo es aprender Note entender su importancia Qué es Y por qué lo necesitamos para crear aplicaciones apis y servicios con not Vale ahora dónde puedes pedir ayuda Imagínate que tú sigues el curso y dices no me entero tengo dudas problemas ayuda ayuda como como dicen mi sobrino ayuda Bueno pues tenemos un disco maravilloso donde la gente no para de vale en el disco tenéis justamente el canal de node veis este de note el de certificado no el certificado ya está
agotadísimo y mañana tendrán sus ejercicios que para que consigan el certificado pero veis aquí que pone nouches pues podéis ir a este canal y aquí hay 55.000 personas que están aquí ayudando fijaos que hay un montón de movimiento un montón de gentes ayuda mira aquí os dejo el repo donde mide subirá el curso o sea fijaos que la gente está súper activa Entonces si tenéis alguna duda y tal no me escribáis a mí no me escribáis un mail a mí que la gente me escribe y yo no puedo con todos me es imposible ayudaros porque
es súper bonito hacer comunidad que aprendáis juntos que resolváis vuestras dudas Oye no me sale esto como habéis hecho este ejercicio no entiendo este concepto lo que sea vale hacer comunidad hacer networking y aprovechar que tenemos este disco maravilloso para todos ustedes Note no es un lenguaje de programación no es un framework no es una web no es un servidor no es un Hosting he leído de todo sobre lo que y muchas veces es equivocado No es un lenguaje de programación no es un framework es literalmente un entorno de ejecución de javascript Qué quiere decir
esto pues es muy simple un sitio donde tú puedes ejecutar javascript ahora bien Esto significa que vamos a poder crear un montón de diferentes tipos de aplicaciones significa que vamos a poder ejecutarlo en el backen en nuestra terminal Incluso en dispositivos Hay un montón de dispositivos Como por ejemplo la Nintendo switch que dentro está ejecutando Note y tú dirías que son backen No es simplemente un dispositivo que tiene embebido no 10 es un entorno donde puedes ejecutar javascript sin ser un navegador es de código abierto es multiplataforma quiere decir que funciona en un montón de
plataformas se compila en diferentes plataformas como macos unix Windows Nintendo switch en la tele que usas en un montón esas síncrono con In Out con entrada salida de datos con una arquitectura que orientada a eventos esto es muy importante lo veremos más adelante porque la segunda clase te explicaré Qué es y cómo funciona el evento que es una de las cosas que la gente más miedo le tiene a nauji es y ya vas a ver que es muy sencillo pero por eso es importante saber que su arquitectura está orientada a eventos y cuál es el
secreto que tiene no Yes el secreto que esconde noyes Es que fíjate un entorno de ejecución para javascript es que el literal lo que significa no oyes el secreto que esconde es que utiliza v8 y Qué es v8 pues es el motor de javascript que utiliza Chrome el navegador Chrome una de las mejores cosas que tiene es que ejecuta muy rápido javascript hace muchos años teníamos problemas de que javascripera lento y tal y poco a poco los motores han ido evolucionando mejorando y haciendo que la ejecución de javascript fue más rápida Pues eso Chrome el
motor está totalmente separado y no yes se aprovecha de ese motor que es totalmente de código abierto para ejecutar javascript Así que cuando estamos utilizando node 10 estamos ejecutando nuestro javascript en el mismo motor que el de Chrome vale es el mismo motor pero no el mismo entorno diferencia vale es el mismo motor imagínate un coche Pues sería el mismo motor del coche pero no sería el mismo escenario uno sería en un taller y otro sería en otro sitio Vale pues eso es súper importante para que nos quede muy claro que no Yes está orientado
a eventos es que es un modelo de programación en el que básicamente tiene un bucle en el que va manejando las solicitudes que le van llegando cada vez que tiene un evento no en lugar de esperar bloqueos lo que hace es va ejecutando tareas mientras espera respuestas de otras tareas que ha dejado por ahí vale Pero qué pasa que lo está haciendo en un solo sets Y esto es importante que lo entiendas porque es una diferencia bastante dramática con otros entornos de ejecución o incluso otros lenguajes es monohilo Aunque más adelante veremos también web workers
Cómo puede tener más de un hilo y todo esto pero tiene un sistema que hace que libera ese proceso para poder hacer cosas en asincrono eso lo vamos a ver en la clase de hoy para que veas una diferencia Y entiendas exactamente cómo se aprovecha de la sincronía Y cómo espera eventos para simular que puede hacer más de una cosa a la vez pero no lo hace vale solo hace una cosa a la vez lo que pasa es que gracias a estar basado en eventos va esperando que ocurran cosas para decir bueno Esto lo voy
a aparcar aquí eso lo dejo aquí voy a seguir con esto pero cuando llegue esto lo retomo Vale cuando alguien me diga vale Ya he terminado aquí buenísimo pues ya lo tenemos Porque aprender Note porque aprender Note si hay tantos lenguajes de programación ahí fuera el otro día alguien me escribió en Twitter y me dijo para qué voy a aprender Note si ya sé fichard me dijo eso no como de una forma despectiva y está bien o sea está bien que alguien no quiere aprender no Yes y lo que sea pero mira te voy a
dar cinco razones y una extra de Por qué tendrías que aprender no oyes la primera la demanda del mercado Netflix la NASA trello PayPal linkedin Walmart Uber Twitter Yahoo eBay go daddy da igual la empresa que se te pase por la cabeza todas las empresas que he mencionado utilizan nodees de una forma u otra cualquier compañía que conozcas de una forma u otra está utilizando y están equivocados no Yes va mucho más allá cuando vosotros estáis utilizando visual Studio code utiliza nodees cuando vosotros pasáis el linter cuando utilizáis el Slim cuando utilizáis un montón de
comandos en vuestra terminal estáis utilizando sin saberlo no 10 Hay un montón de cosas que aunque la gente lo desconoce utiliza no Yes que va mucho más allá del backen que también se puede pero es que va mucho más allá así que la demanda que hay en el mercado de New Yes es muy grande es la parte central del famoso stack vale que sería mongodb Express Note No ese sería el famoso bueno o tendrías el mert que sería con angular pero fíjate que siempre la n de Note aquí tendrías también la n de Note y
la n está aguantando todo Note 10 utilizan a que parece un chiste eso Pues claro que sí que no quieres utilizar hoy es esto ya lo hemos visto muchas veces hay lenguaje de programación que se utilizan a sí mismos y no es una una excepción también Vale ahora porque aprender note la demanda el stack 2 para mí súper importante puedes usar todos tus conocimientos de javascript pero en este entorno de ejecución O sea si ya sabes el lenguaje de programación javascript puedes utilizar muy rápidamente no vas a ver hoy que vamos a hacer cosas prácticas
con código y vas a decir madre mía Pero qué rápido y qué fácil si esto es javascript pues lo vas a ver lo vas a entender y lo vas a disfrutar el hecho de poder ser productivo tan rápido es increíble 3 puedes crear aplicaciones web apis servicios sin complejidades scrapping utilidades puedes hacer tantas cosas con nogys que no aprenderlo a mí sinceramente me parece hasta un crimen así que no te limitas en nada 4 una comunidad inmensa y ecosistema todavía más grande de hecho el ecosistema enojs tiene el registro de paquetes más grande del mundo
que es en pm que lo vamos a ver hoy entonces sus posibilidades son ilimitadas es que tienes un montón de posibilidades al alcance de tu mano un montón de artículos y bueno Solo tienes que ver aquí Cuántos somos 2556 personas 2556 personas que están interesadas en oyes esto lo único que quiere decir es que vas a tener seguro gente con la que hablar con la que disfrutar con la que charlar eso es increíble no 5 y este te puede sorprender porque tiene muy mala fama pero no es es rápido escalable y además fácil de desplegar
y muy barato o gratis de desplegar hay gente que le da muy mala fama ajíes y es verdad que tiene cierta limitaciones y quizás en ciertas cosas no es tan rápido como otras soluciones pero no es lento y se puede escalar bastante bien el hecho de que sea mono proceso eso mucha gente lo ve como algo negativo Pero no tiene por qué serlo porque puede utilizar cada uno de los procesos de un servidor imagina que tienes 16 procesos pues podrías tener ya 16 aplicaciones abiertas simplemente escalándolo así y eso en algunas ocasiones es más una
ventaja que una desventaja Así que en realidad no es para ciertas cosas puede ser una solución óptima súper rápida y muy barata que es verdad que consume más memoria que otras soluciones es verdad Pero también es verdad que lo que te permite escalar es diferente a otros porque como te digo al ser mono proceso esto te da ciertas ventajas y aprovechar las máquinas de otra forma el hecho de que mucha gente diga es que lento Que no sé qué Yo creo que muchas veces se trata un tema de ignorancia o de compararlo en algunas cosas
en las que a lo mejor no oyes no es lo mejor pero tampoco es lo peor ni mucho menos se creó en 2009 lo hizo ryant que es bastante interesante porque ryant ha creado ahora a Dino que es una alternativa no pero una de las razones por las que lo hizo es porque estaba limitado por las posibilidades que tenía Apache http server un servidor de que no era capaz de manejar muchas conexiones de forma concurrente y para eso creo no Yes para que te hagas un poco la idea y mira que Apache siempre tuvo como
una muy buena fama de poder manejar un montón de conexiones obviamente Apache ha mejorado un montón pero también lo ha hecho en audios entonces para que os hagas una idea pues imaginaos desde el 2009 que tenemos no Yes con nosotros y todo lo que ha evolucionado y lo que le queda es espectacular lo mejor que le pasó a fue sobre el 2015 porque en 2015 se volvió a unir con otro proyecto que fue una decisión hubo peleas hubo un montón de cosas pero a partir de 2015 no Yes retomó el camino la senda y además
ahora es parte de la Open source fundation O sea que el Nou es es un proyecto totalmente de código abierto no hay una empresa detrás que tenga cierta no sé pues una agenda oscura ni nada de eso y los requisitos los requisitos para seguir este curso lo primero obviamente necesitas algo de javascript que son las expresiones los tipos de datos variables funciones manejar Arrow functions que es un callback bucles necesitas javascripts es que cualquier cosa Se me ocurra lo vas a saber qué es lo que sí que voy a explicar y no hace falta que
sepas pues es más cream modules porque los módulos los voy a explicar Y eso sí pero así que a white lo vamos a hacer muy por encima promesas seguramente lo vamos a hacer un poco por encima así que explicaremos alguna cosa pero un poquito por encima entonces necesitas saber javascript si no sabes javascript porque dices no sé por dónde empezar y tal yo estoy subiendo un curso totalmente gratis que puedes recomendar vale aprende javascript curso para aprender paso a paso javascript 100% gratis y práctico donde tienes un montón de vídeos te explica operadores tipos y
tal nos hemos quedado en los objetos pero lo vamos a seguir evolucionando Así que pronto tendrán nuevas clases y podrás continuarlo y si no otro que te puedo recomendar es javascript info que además también está en español lo puedes pasar aquí a español así que este también está súper bien y también te lo recomiendo vale para instalar lo que tenéis que hacer tenéis dos opciones os voy a explicar la oficial vale voy a explicar la forma oficial y yo luego voy a recomendar la que yo haría la oficial es que vayáis directamente no.org/s lo tenéis
así en español si entráis y por lo que sea os sale en inglés y os asusta el inglés vale que sepáis que arriba a la derecha tenéis la posibilidad de cambiarlo Ves lo podéis poner en el idioma que queráis en español y ya está aquí os dan dos opciones y es súper importante que entendáis la diferencia no porque tenéis dos botones y ya empezamos con las decisiones decisiones bueno la decisión que tenéis que hacer aquí es entre esta y esta obviamente muchas veces vais a decir O sea pues esta es la actual Esta es la
buena y no es así la buena es la de la izquierda de hecho ya lo pone aquí recomendado para la mayoría lts significa long term Support O sea que tiene el soporte de término largo es la versión que están actualizando que están comprobando que todo funciona bien es la estable y esto es que lo que hacen hoy es funciona siempre con las versiones pares y las pone como lts la versión 20 que es la última todavía no es la versión estable del todo tiene las últimas características pero no es la estable Así que lo que
yo recomendaría os instaláis esta y lo mejor es que una vez que le deis aquí clic Vais a tener aquí ya sea macos un paquete ya sean Windows un instalador lo que sea lo importante al ejecutarlo vale Lo importante de ejecutarlo aunque no ejecutes todavía no ejecutes todavía solo solo sígueme pero no no termines de instalarlo todavía te saldrá esto y lo importante que te pone aquí la versión de mpm la versión de not vale le darías a continuar continuar continuar y atendías pero esta es la versión oficial que esta es la sencilla esta no
vas a tener ningún problema simple Y tal Pero cuál es la desventaja que tienes con esto la desventaja Es que esto te va a instalar Note una vez te va a instalar una versión de node en tu sistema operativo pero imagínate que tú quieres utilizar diferentes versiones o que estás trabajando en diferentes proyectos de nojes claro Entonces vamos a decir qué rollo No porque entonces qué hago tengo que volver a instalar y tal tienes diferentes opciones una podría ser doquerizar tus aplicaciones y todo esto no está mal pero es totalmente compatible con la que te
voy a decir que me parece incluso la que tendrías que hacer Sí o sí utilices docker no utilices docker O hagan lo que hagas y es el hecho de utilizar un administrador de versiones de node y de hecho por ese nombre el más conocido es MB es un proyecto que lo que hace es ves Note versión manager que lo que te permite es tener e instalar más de una versión a la vez de Note y puedes cambiar fácilmente entre una y otra mbm funciona con macos Linux con todas las típicas se utiliza Windows y no
tienes la terminal no funciona por suerte vas a tener mbm Windows vale que es una alternativa que sí que funciona en Windows hay otras alternativas más vale MB es una y yo te voy a contar Esta es la más conocida Pero te voy a contar mi favorita Esta no es mi favorita la favorita se llama fnm Fast and simple es versión está construido con ras Además de que funciona súper rápido lo puedes utilizar tanto macos como en Windows como Linux lo único negativo que tiene pues que necesitas instalar rast Pero bueno eso lo puedes hacer
muy fácilmente con una línea va muy rápido va súper bien y lo instaláis así vale ejecutáis esto en vuestra línea de comandos una vez que ya tengáis rasting instalado en vuestro sistema operativo vale hacéis Así pegáis esta línea de código y esto directamente os instalará fnm y para instalar rast también solo tenéis que ir a rustland mejor rustland que si no os va a salir el videojuego y aquí le dais a comenzar y aquí tenéis un poco pues la línea de código que Vais a tener que pagar pegar para instalarlo una vez que lo tenéis
instalado que ya funcione y tal Bueno lo primero que tendríais que hacer es ver que realmente funciona y ejecutáis FN m y aquí ponéis versión y os aseguráis que tenéis bien el path correctamente que tenéis que es el ejecutable funciona funciona sabes que no se encuentra el paz un error muy común algo que normalmente se puede arreglar fácil es cerrar la terminal y volver a abrirla y lo volvéis a intentar Y si eso todavía no os funciona normalmente es que tenéis algún problema con el Paz vale buscáis aquí paz veis que pone paz y que
tenéis que hacer que sea que esté disponible de forma global normalmente esto es un problema que podéis tener vale con el paz pero normalmente aquí siempre siempre los errores típicos y comunes o los van a explicar reiniciar Windows a veces funciona también entonces una vez que ya lo tenéis instalado yo lo voy a hacer todo con fnm podéis utilizar fnm veis aquí veis la versión y ya con fnm tenéis diferentes subcomandos podéis utilizar alias con playstations current Entonces yo ya tengo algunos instalados para eso hago fnm list y me dice todas las versiones de no
Yes que tengo instaladas y por defecto tengo la 18.16.0 esta versión Es casi la lts es la que vamos a utilizar vale nosotros vamos a utilizar la lts la sea en este momento yo tengo la 18.16 acaba de salir la 17 pues ya está lo importante es que utilice la 18 Por qué Porque si tú empiezas a utilizar Note 8 Note 6 Note 12 vas a ver cosas que no funcionan Exactamente igual porque a mí esto no me funciona que no me encuentra el método vale Así que es importante que te asegures que estás utilizando
la versión correcta Y fíjate que aquí además lo tienes con el color en azulito que no lo tienes No pasa nada haces fnm install Y le pones la versión que quieres instalar que quieres instalar la 18.17.0 la pones le damos al enter la instala tarda unos segundos y ya está ahora cuando hagamos un fnf list Vais a ver que ahora También tenemos la nueva versión hacemos fnm le decimos que queremos utilizar la versión 18.17.0 y ya está ya estamos utilizando la versión que pone aquí para asegurarnos que todo está funcionando correctamente que estamos realmente utilizando
esa versión vamos a empezar a utilizar Note y lo que tenemos que asegurarnos es que tenemos el programa la aplicación en el pas así que ya ponemos Note y ponemos aquí versión Y fíjate que aquí ya me dice que la versión es la 18.17.0 O sea nos estamos asegurando que estamos utilizando la versión correcta lo mejor de esto es que si seguro que vas a utilizar esta versión 18.17.0 Es que la hagas por defecto de forma que siempre que entres siempre utilice esa ves que hay aquí una cosa y pone alias lo que puedes hacer
es decirle mira fmls y le dices fnm alias le dices la versión 18.17.0 y dices que esta es por defecto vale Y ahora Aunque yo entre y vaya a otra pestaña y Pongo aquí node version me va a utilizar la 17.0 es un error muy común que cuando tienes un montón de versiones ya no sabes cuál estás utilizando Y qué está pasando por ahí asegúrate que tienes por defecto la que más utilices la lts la que es estable y todo esto Vale y que quede por default Y fíjate que ahora cuando haga el ls de
todas las versiones ahora por default me indica que es esta vale muy bien Vamos a empezar a utilizar Note como hemos dicho noud es un entorno de ejecución de javascript Así que al ejecutar Note lo que va a ocurrir Es que fíjate nos pone como una línea de comandos y nos da la bienvenida y nos dice Bueno puedes hacer cosas aquí Fíjate que ya me dice que puedo hacer un punto help para tener más información y aquí me da como algunos comandos que podría ejecutar Esto está interesante Pero te voy a explicar que lo que
ha pasado y que estás Qué es lo que estás viendo lo que estás viendo es una cosa que se llama ripple vale r epl es un read eval print Loop básicamente es que tú puedes ir escribiendo aquí lo que tú quieras Obviamente javascript que lo que soporta no lo que va a estar haciendo constantemente esto es ir leyendo evaluando imprimiendo y esto todo el rato en un lip en un Loop constante Ves Ahora hemos escrito aquí consta igual Hola mundo estamos creando una constante y ya puedes hacer un conson log de a y ejecutarlo Y
fíjate que se ha acordado si tú pones 2 + 2 esto lo evalúa automáticamente y me dice 4 o sea aquí ya podemos estar utilizando funciones de javascript aquí podríamos poner pues saluda aquí pasarle el nombre y poner conson Love del nombre voy a poner Hola name vale obviamente esta no va a ser la forma de programar no pero ves ya encuentra la función Saluda y aquí le ponemos Miguel saluda a Twitch vale o sea que ya vemos que aquí se está ejecutando Note sin ningún problema puede ser interesante A veces utilizar el ripple para
cosas muy cortitas que quieras que quieras hacer el rippel este esta línea de comandos es muy similar a lo que tenéis cuando abrir las herramientas de desarrollo y vais aquí a la consola es muy parecido De hecho aquí si ponéis Dos más Dos o lo que sea Pasa Exactamente lo mismo es muy similar Pero no es así como vamos a utilizar Note Así es solo para probar para ver que funciona y todo sino que lo que vamos a querer es ejecutar los archivos Así que vamos a irnos a creo que he creado un repositorio Ahí
es donde vamos a guardar a ver curso No de hecho alguien me lo ha puesto alguien me lo ha puesto por aquí No mira lo voy a clonar para ir subiendo todos los códigos que vayamos haciendo y ahí pues lo Vais a tener todo para poder repasar y hacer lo que queráis vale curso Note 10 Esto está totalmente vacío solo tenemos un Ritmo Vamos a abrir esto tenemos un ritmo no tenemos ningún fichero no tenemos absolutamente nada vamos a crear nuestro primer archivo hemos dicho que ejecuta javascript así que hacemos index.js y aquí pues vamos
a poner lo típico Hola mundo para facilitar cómo vamos a estar trabajando con lgs e ir viendo todo el output y todo esto yo voy a abrir la terminal aquí para que lo tengamos constantemente y pueda acceder fácilmente veas el output y así no se complique pero si a ti te complica por lo que sea ponlo más de un sitio vale Cómo podemos ejecutar ya nuestro primer fichero Pues nada Note y le pasamos como argumento es el archivo que queremos ejecutar en lugar de temporada que poner el ripple ya le decimos Cuál es el archivo
Index le damos a enter y ya está aquí tenemos la consola ya tenemos nuestro primer Hola mundo en knojiz lo estamos ejecutando pero fíjate cosas interesantes primero que tiene acceso al conson lock vas a poder acceder a la consola como si lo hicieras en el navegador puedes utilizar con softlock puedes utilizar consolinfo De hecho cuando pones con sol Vais a ver aquí que tenéis un montón todo esto lo podéis utilizar y luego vamos a ver algunos especiales bastante interesantes pero podéis utilizar consolinfo podéis utilizar el consola error ahora bien El único problema que Vais a
ver es que el color aquí es exactamente el mismo En cambio cuando utilizáis en el navegador Aquí sí que tenéis como diferentes colores mucho más bonitos que sí que os indica que esto es un error que tal Pero eso por defecto no es no lo tiene lo único que hace es Mostrar la salida en la consola y ya está y la consola en este caso podríamos entender que es el canal de output que tenemos la terminal Así que la consola la veremos aquí siempre que queramos enseñar alguna cosa va a utilizar el consort el sistema
out la línea de salida del sistema de la terminal y ya está sería la forma de comunicarnos Si queremos darle algún feedback Si queremos lograr cualquier cosa variable globales Fíjate que el consort no lo he tenido que importar no tengo que hacer nada pero bueno Esto no te sorprende porque esto en javascript en el navegador pasa lo mismo que el sol log y algunas palabras clave Pues no hay que hacer absolutamente nada pero ojo cuidado en nous no tenemos Windows vale si pones un conson log de Windows vamos a ver que al ejecutarlo va a
petar vale Tenemos aquí un error Por qué nos está dando un error porque nos dice que Windows is not the find y esto lo tienes que tener clarísimo porque esto es un error común muy típico que va suele pasar muchas veces en ojies y lo he visto Así de veces en aplicaciones de Ría que claro como son aplicaciones de react se cree que directamente funcionan que también el navegador Pues igual funciona el Note y no es así no 10 es un entorno de ejecución totalmente diferente al navegador y por lo tanto el objeto global de
Windows no existe no tenemos una ventana donde estemos mostrando los datos sí que tenemos un objeto global pero no es Windows si ponemos aquí un type of the Windows vamos a ver que nos dice que esto es ande por suerte una cosita bastante interesante que ahora es nueva de javascript es que tenemos un objeto global que sí que es común para todos los entornos tanto para Note 10 como para el navegador y tal que se llama global this global this es como la variable global tanto de node como del navegador de todos Así que si
haces un consolog de globaldies aquí vale veis Aquí sí que han salido un montón de cosas con un montón de métodos y si vas aquí también aquí sí que tienes Windows pero fíjate que aquí tienes globaldis y aquí también tienes Windows lo que pasa aquí y esto vamos a hacer un pequeño un pequeño vale para que lo tengas clarísimo globaldis que es pues es No te asustes por el nombre porque no tiene ningún sentido es una variable Global en toda nuestra aplicación Qué quiere decir que vamos a poder acceder a ella no importa dónde estemos
No importa que esté dentro de un sitio O sea no importa que esté dentro una función de una función anidada no importa Siempre vas a tener acceso esta variable que es como la variable global Qué pasa que en el navegador globaldis en el navegador vale esto este globaldis esto apunta a Windows vale que también es una variable que vas a poder acceder a todos sitios en el navegador pero resulta que en no Yes Y ahora os contaré un poco las diferencias esto es el navegador y el Note 10 esto lo que apunta en realidad es
a uno que se llama global vale cada uno Tiene lo suyo Pero por qué os voy a recomendar que cuando utilicemos la variable global intentemos utilizar siempre globaldies porque es la forma realmente correcta de referirse a la variable global Por qué Porque si no en algún código vamos a estar haciendo global nos haremos Windows en otros haremos global o a veces incluso veremos Bueno si type Windows es and the find entonces intentaremos utilizar a global sabes y eso no es así entonces en el navegador Windows es la variable Global en Note es global vale De
hecho si hacemos el consola de esto Vais a ver que funciona pero cuando vayamos a utilizarlo por lo que sea Siempre vamos a utilizar el nombre de globaldis y es una variable global que también apunta en este caso a global vale para Note 10 es una variable global que vamos a poder acceder en toda nuestra aplicación y fíjate una cosa que esto te va a volar la cabeza pero es importante que lo entiendas vale porque es que si no las cosas que no se diferencian de la magia complicado Vale entonces te voy a explicar una
cosa importante puedo derrumbar tu mundo pero no te has preguntado alguna vez de dónde sale por ejemplo el consoló este consol dónde sale sabes por qué puedes utilizar aquí con sol Pues resulta que con sol sale de globaldis de hecho este código funciona y es correcto todo lo que es global sale de global this vale lo digo porque para que quites la magia de pensar el cónsul lock es una variable global No lo que pasa es que con sol es una propiedad de la variable global globaldis no y de la misma que se llama global
Entonces siempre que utilicéis cualquier cosa Como por ejemplo fetch como por ejemplo phonomis cualquier cosa que utilicéis que parece que sale de la nada todo en realidad sale de esta variable global que parece mágica pero fíjate todo lo que tiene No pues todo esto que son muchas de las cosas que estáis sacando como de la nada en realidad todas salen de esta variable global y esto es muy importante que lo entiendas porque esto es algo importante en javascript en node y en cualquier entorno para entender De dónde sale Esto vale o sea que más que
nada para que sepáis el más también más cualquier cosa que utilicéis pues ahí lo tenéis el más también lo tenéis habéis vivido una mentira ya ves ya eso es bastante interesante porque así entendéis correctamente De dónde salen estas cosas no vamos a ver un tema bastante importante de hoy es para empezar ya hemos visto no que tenemos Pues que podemos ejecutar javascript Esto no es lo realmente importante pero pero ahora sí que vamos a hablar de algo crucial en que además ahora mismo está siendo polémico y yo te voy a explicar por cómo funciona Porque
es polémico Y qué tienes que hacer para solucionarlo vale fíjate Imagínate que tienes una función suma y aquí obviamente puedes sumar 1 y 2 sé que esto no es complicado que no es difícil que obviamente parece muy sencillo al hacer un consort de esto pues tenemos que la salida es 3 en nous nunca vamos a tener todo nuestro fichero todo nuestro código en un fichero no tiene sentido lo vamos a intentar Separar en diferentes ficheros y para para eso vamos a utilizar un patrón de diseño ojo con esto que muchas veces os da miedo los
patrones de diseño pero esto es un patrón de diseño que es el patrón de diseño módulo y De qué trata este patrón de diseño es un patrón de diseño en el que lo que vamos a hacer es separar nuestro código en diferentes ficheros y los vamos a poder importar Y exportar vale para que ese código se reutilice así podemos Pues organizar el código mejor reutilizarlo y no repetirnos no por ejemplo esta función suma esta función suma podríamos separarla aquí y vamos a ponerla aquí zoom.js la sacamos no ponemos esto por aquí pam pam pam y
hacemos la función separada pero ahora lo que vamos a querer es poder utilizar la función aquí porque si no fíjate utilizamos suma Pero de dónde sale suma de hecho si intentamos ejecutar esto pues me dice oye suma no está definido no ya me lo dice aquí dice Oye suma no está definido lo tenemos que importar hemos separado la función en otro archivo pero tenemos que indicar que esto es un módulo esto es importante voy a enseñarte el sistema clásico de que se le llama common Yes y por desgracia el nombre tiene bastante que ver con
la realidad Porque se llama common Yes porque es bastante común que cuando tú busques ejemplos de código cuando le preguntes a Chucky muchas veces te va a responder con esto y no está mal pero es la forma clásica antigua y no está depredada pero casi no es la recomendable a día de hoy pero yo te la voy a enseñar Y seguramente lo vas a ver en muchos ejemplos pero tienes que entender que está la forma clásica lo que tienes que hacer aquí para empezar y decirle Oye quiero exportar este módulo utilizas módulo punto exports y
le dices que es lo que quieres exportar en este caso la función suma este módulo que ves aquí pues directamente este módulo lo que tenemos es otra variable global que podemos utilizar para indicar qué módulos está exportando este archivo no Y para importar este módulo tenemos que ir al Index y decirle vale aquí necesito voy a crear una constante zoom que requiero del módulo que está en el Paz punto barra o sea que está en el mismo en la misma carpeta/sum vale Y con esto ya estamos haciendo esa conexión aquí estamos exportando el módulo sum
y aquí estamos importándolo requiriéndolo Ok y ahora sí esto al ejecutarlo funciona también se pueden hacer que sean nombrados no porque muchas veces aquí claro Qué pasa que aquí le puedes poner el nombre que quieras a la función no Y esto pues le podríamos cambiar el nombre pero ya vemos que aquí lo que está pasando Es que el módulo se está exportando como suma y aquí lo estamos utilizando como de la gana para obligar o forzarlo hay diferentes formas de hacerlo pero una de las más fáciles es esta no tú creas un objeto y lo
que haces es exportar un objeto donde tengas una llave que sea zoom y aquí lo que tendríamos es la función esto sería Exactamente lo mismo que si esto lo pusiéramos aquí vale aquí lo que estamos haciendo devolver un objeto con la llave zoom y como tiene el mismo nombre sum aquí y aquí por lo que tenemos es una forma de hacer un atajo en lugar de tener que repetirlo dos veces vale muy bien así que aquí nos obligaría a utilizar el nombre haciendo una de estructuración de la llave no así que esta sería la forma
clásica de los módulos esta se llama common Yes De hecho voy a dejaros este sam.js vale vamos a dejar aquí common Yes module export y aquí tendríamos como GS vale muy bien esta es la forma clásica pero ya ha evolucionado en ojies y por suerte por suerte tenemos otra forma de importar Y exportar módulos que está seguro que la conoces porque es la más típica que ves cuando utilizas y trabajas como empaquetadores de aplicaciones como webpack Beat y lo que sea o como next voy a crear una carpeta le vamos a poner cjs vale cjs
es la forma que se le dice a common Yes lo voy a poner aquí lo voy a poner aquí para que veamos lo tengamos totalmente separado ahora voy a crear otra vez un index.js pero fíjate en una diferencia ves que se llama punto js le voy a cambiar la extensión y le voy a llamar mjs js englis por defecto Utiliza commonjis también puedes utilizar mjs para utilizar en mascream modules que es el sistema que te voy a utilizar ahora o puedes forzar que utilice como Yes para utilizar como Yes pero por defecto utiliza punto js
que es el que hemos utilizado antes pero si le cambiamos la extensión fíjate le he puesto una m vale Esto es algo oficial de node lo que vamos a poder hacer aquí es podemos utilizar el import vale Y aquí le indicamos Sam punto mjs y aquí pues hacemos la suma y ahora debemos crear también este módulo aquí Así que hacemos Sam punto mjs porque vamos a utilizar en macri modules y lo mismo que habíamos hecho aquí con esta función Pues aquí lo podemos exportar en la misma línea podemos hacer un export function y así lo
exportamos hacemos el import con el nombre con llaves para asegurarnos que utilizamos la forma nombrada desde el archivo Sam punto mjs y aquí tenemos la exportación de la función y aquí podéis exportar más funciones por ejemplo pues podéis el suv y tal podéis tener más de una función que estéis exportando este sería el sistema de módulos moderno recomendado a día de hoy vale Este es el que deberíais siempre que podáis utilizar si vais a crear una aplicación desde cero por qué Por qué está aparte de ser moderna y tener bastantes ventajas Esta es la que
está en la especificación oficial de javascript que por suerte ahora lo está utilizando también Note Vale entonces aquí podríamos pues importar todo lo que hemos hecho ves el suv el mult suv Vale y lo podríamos utilizar también igual y tendríamos tres Aquí hacemos Note Index punto mjs importante la extensión ves y aquí tendríamos el resultado en esta primera clase no vamos a seguir utilizando en macri Mods vale vamos a seguir utilizando los recuads Pero puede ser que en algún momento lo cambiemos Y tal Pero es importante que que existen los dos que los dos funcionan
Es recomendable es Maggie modules pero hasta que no veamos el pack Jason y cómo cambiarlo sin necesidad de cambiar la extensión vamos a estar utilizando Este vale vamos a estar utilizando el típico del common Yes Así que te pongo Este ejemplo aquí vale mjs Y continuamos así ya sabes los dos sistemas de módulos que tenemos en logias vamos a hablar de los el sistema de módulos nativos los módulos nativos que tenemos en nouds vamos a crear otra vez un index.js a ver sería muy aburrido Si todo lo que pudiéramos hacer son funciones y ya está
no O sea ponemos funciones function de javascript y ya está pero no sólo se trata de esto lo bueno de nouji es al ser un entorno de ejecución es que nos da una biblioteca enorme de módulos nativos que nos va a dar acceso al sistema de archivos al sistema operativo a internet a cualquier cosa que te puedas imaginar lo vamos a poder hacer aquí directamente y vamos a ver unos cuantos ejemplos y vamos a incluso a crear pequeñas aplicaciones solo con esto por ejemplo el primer sistema el módulo nativo que te puedo decir es uno
que te da información del sistema operativo y que te va a llamar la atención de la información que te da por ejemplo vamos a crear una constante y vamos a requerir el módulo nativo os te voy a explicar una cosa muy importante a la hora de importar módulos nativos de node con commonts podemos hacerlo así con reward o s pero a día de hoy desde la versión 16 de no es recomendable utilizar el nombre del módulo nativo vale lo recomendable es utilizar el prefijo Note dos puntos y entonces Fíjate que además el autocomplete ya te
dice de todos los módulos nativos que tienes la consola cluster cripto buffer tienes un montón asset para hacer testing dns module http para hacer un sistema un servidor web que lo veremos después timers Hay un montón urls utilidades y uno de ellos es el de os este de aquí que que nos va a dar información de nuestro sistema operativo con esto podemos hacer esto que parece una tontería ya ya nos va a permitir hacer una aplicación pequeña pero útil con Note 10 podríamos tener aquí pues la información del sistema operativo Imagínate que le pudiéramos decir
a todos nuestros amigos le pasamos este código y le decimos ostras ejecuta esto que te va a decir te va a dar información por ejemplo el nombre del sistema operativo nombre del sistema operativo pues esto lo podemos conseguir ejecutando o ese punto platform vale esto te da la plataforma podríamos tener la versión de sistema operativo la arquitectura del sistema operativo también podemos tener la arquitectura para saber por ejemplo si el sistema operativo Mira arquitectura podemos utilizar os ark vale Si es de 32 bits Si es de 64 bits esto lo vamos a poder saber vamos
a poder saber cuántas cpus tiene tu procesador No cpus pues cpus Y esto que parece una tontería esto en realidad bastante importante porque con esto vamos a poder escalar procesos en node esto es bastante avanzado lo veremos más adelante Pero vas a ver que esto que ahora dirás va Qué tonterías a ver Cuántos procesadores tiene pues no ninguna tontería porque luego a través del código vamos a poder ir creando procesos hijos para tantos procesadores como tengamos poder escalar nuestra aplicación de node podemos ver Cuánta memoria tenemos la memoria total esto lo debemos dividir entre 1024
y 1024 para tener los megas vale al menos los megas 1024 vale Y yo creo que con esto ya está Pues fíjate en un momento hemos hecho una pequeña aplicación que parece una tontería pero fíjate que esta aplicación ya nos va a dar bastante información node in the js Y fíjate la información que tenemos por aquí mira tenemos información de nuestro nombre sistema operativo Darwin que es macos básicamente versión de sistema operativo la arquitectura la cpus Y fíjate de la cpus que tenemos incluso cuál se supone que es la velocidad cuál se supone que tenemos
aquí el sistema si lo cuando si no se está utilizando todos los cores los Tenemos aquí luego la memoria libre y la memoria total vale la teníamos por aquí creo que se me ha olvidado dividir Ah no lo he hecho bien memoria libre ostia puede ser 125 megas curioso Pero bueno el tema es que esto que puede parecer una tontería al menos ya tenemos cierta información que de otra forma No la tendríamos de hecho ya estoy pensando el uptime no sé si con el sistema operativo conson lock a ver uptime creo que sí creo que
el uptime lo podemos tener también el up Time para que no sepa hay un comando que se llama uptime que te dice justamente Cuántos días lleva tu ordenador encendido y es un comando este mismo Comando lo podríais hacer directamente con no utilizando os.aptime así que ya hemos hecho un poquito más listo aquí nuestro nuestro pequeño programa ves y nos saldría en este caso no sé si esto sería apta en cuanto nos lo da en segundos si lo dividimos en segundos entre 60 tendríamos minutos y esto serían horas O sea 152 horas que 152 horas entre
24 son los 6 días que nos salían No pues mira ya tenemos una pequeña aplicación con esto así que vamos a poner aquí que está en nuestra nuestro primerito os info Obviamente si nos ponemos así de aplicaciones de hoz pues es un poco aburrido No vamos a crear otra aplicación vamos a crear una que utilice el file System el file System el sistema de archivos es de lo más importante e interesante y lo más utilizado que vas a hacer en logias de hecho hoy le vamos a dar bastante caña vale Qué significa fs ahora lo
explicaremos No te preocupes fs significa file System sistema de archivos fs significa file System Mira para que lo entendáis mejor y no oléis vamos a cambiarle el fs file System vale que es el que vamos a utilizar ahora y además vamos a utilizar temas asíncronos O sea que está bastante interesante no se puede usar los import en lugar del recuadro con los módulos de node totalmente lo mismo que hemos hecho en este mira este iOS info que hemos utilizado un require en este caso Fíjate si tú esto lo copiamos vale hago una copia y utilizamos
mjs en lugar de js aquí lo que podéis hacer es utilizar el import y Mira te voy a enseñar más todavía Cómo puedes pasar en un require a import súper fácil ves que aquí hay tres puntitos en la r ves que hay tres puntitos si tú te pones encima y le das Comando punto te va a poner convertir en módulo en máscript le das y ya me la ha convertido automáticamente y automáticamente además lo que ha hecho es importarme lo que necesita y me ha refactorizado cada cosa o sea brutal lo ha hecho automáticamente y
ahora podríamos ejecutar el iOS info mjs y apretado apretado porque lo escrito mal es que he puesto iOS Vale ahora ya está funciona Exactamente igual o sea lo que he hecho aquí pero con el require aquí lo estamos haciendo con el import y funciona igual y tiene dos opciones obviamente tendría la opción de importar a cada uno de los módulos o de las de los métodos que quieres utilizar o podrías directamente importar o ese no y importarlo a saco pero sería lo mismo Los módulos nativos de node lo puedes utilizar con common Yes y con
en masking moodles cjs y mjs en el mismo proyecto se puede hacer puedes utilizar como un Yes y en macri modules en el mismo proyecto no es recomendable mezclarlos pero lo puedes hacer cuando usamos frameworks nos acostumbramos a poner las extensiones de importaciones no y siempre tenemos que poner las extensiones vale eso es muy interesante muy buena pregunta escio en el cjs este aquí no he puesto la extensión veis que no puesto la extensión cuando hemos hecho con common y es hecho el recuay no he puesto la extensión pero en el en macri modules en
este De aquí sí que lo he puesto esto es importante y es interesante es que la especificación de ecmas cream modules las extensiones son obligatorias lo que pasa es que webpack Beat y todo esto hacen una especie de magia oscura que resuelve automáticamente por ti la extensión Entonces si vas a utilizar la especificación de macri modus y por lo tanto nouji es también mi recomendación Es que utilicéis la extensión vale hay que utilizar la extensión es parte de la especificación lo que pasa es que webpack y todos estos y yo creo que de forma incorrecta
o sea creo que que claro estamos acostumbrados a ponerle la extensión pero creo que no está bien porque no se ha habituado a un mal hábito porque no es correcto hablando de la especificación Así que en común Yes no hace falta porque también hace esta magia pero en el máximo modus sí que hace falta seguimos y vamos con el fire System vamos con el fire System el fire System o sistema de archivos es seguramente uno de los módulos más importantes de no Yes de verdad es que no vas a parar de utilizarlo todos los días
a todas horas es que es increíble Así que vamos a utilizar fs vale fs de file System y hacemos este require importante siempre utilizamos el prefijo de los módulos nativos Yo sé que Vais a ver en vídeos en cursos en charge pity que no os pone el prefijo pero a partir de no 16 se recomienda poner node dos puntos Antes de antes del módulo y esto lo podéis ver para que veáis que no me estoy inventando Note Vais a la documentación Vais a ver cuando veáis la documentación de cualquier cosa por ejemplo pues http no
y aquí miramos código vale veis Cómo está la recomendación node dos puntos http y de hecho aunque muchos ejemplos como este veis que todavía está con el require hay muchos que Vais a poder empezar a verlos con el import también que los están los están migrando Así que para importar el módulo nativo para tener acceso al sistema de archivos Note dos puntos fs y ya tenemos aquí fs fss significa file System pero muy largo y la gente pone fs qué podemos hacer vamos a empezar fácil porque tiene un montón de cosas y quiero ver como
la más interesantes imaginad que tenemos aquí un archivo txt que vamos a poner aquí Hola mundo vale Fíjate que este archivo está Pues en la misma carpeta en la raíz de nuestro proyecto aquí uno de los más interesantes y sencillos que podemos tener es el de tener la información de ese archivo Así que vamos a poner stats igual y aquí fs punto y fíjate que aquí tenemos pero un montón de métodos importante y Aquí empieza una de las gracias que vamos a tener con nojes asincrono versus síncrono en audios como te he dicho tenemos es
monohilo solo tiene un proceso y está basado en eventos y podemos hacer muchas cosas de forma síncrona y que por lo tanto van a bloquear el proceso o asíncrona Y entonces va a utilizar la arquitectura de eventos donde va a hacer un sistema de lectura escritura en este caso va a leer información y mientras está leyendo eso totalmente separado del hilo va a esperar a que termine y entonces lo va a recibir Entonces vamos a ver primero el ejemplo sencillo no hacerlo Sí claro mucha gente no tiene ningún problema porque simplemente es pensar Bueno voy
a leer stat sing States como para tener la información de este archivo no y vamos a mirar archivo punto txt el stat nos va a devolver diferente información si es un fichero un directorio si es un enlace simbólico el tamaño del fichero un montón de información luego lo veremos Bueno luego lo veremos en avanzado pero ahora vamos a ver por ejemplo si es un fichero stats y directory si es un directorio ese es un enlace simbólico y el tamaño en bytes vale aquí tendríamos por ejemplo la información del archivo punto txt esto sincrono importante Vale
pues ejecutamos nuestro programa file system.js Fíjate nos dice true sí que es un fichero no es un directorio Falls que es de este false que no es un enlace simbólico y nos dice que ocupa 10 bytes o sea esto ocupa 10 bytes pues tiene sentido o sea con esto ya hemos podido recuperar información del sistema de archivos ya podemos leer cuando se ha creado un archivo si es un archivo si es un directorio si no es un directorio podemos hacer diferentes cosas vale Esto será el file System vamos a poner que esto es fs stat
vamos a ir un poquito más allá porque justamente lo interesante de tener ir a un sistema archivos es leer un fichero Así que vamos a hacer el de redfield fácil no hacemos el require vamos a Note fs y aquí para leer un fichero vamos a tener fs punto zinc vale lo hacemos sincrono y luego te explico cómo hacerlo asíncrono y la diferencia le decimos Cuáles archivo que queremos leer archivo txt y ahora ojo Qué pasa que si tú haces esto por defecto lo que te va a hacer es devolverte un buffer vale Te va a
devolver como memoria con información con el byte y te va a decir vale pues aquí tienes la información pero nosotros no queremos que nos devuelva un buffer de memoria con todos los bytes ahí que no vamos a poder entender ni leer sino que le vamos a decir que nos lo convierta a un sistema que nosotros podemos entender así aquí le vamos a decir que la codificación que queramos que tenga a la hora de leer el archivo es vtf8 si le ponemos otro tipo de codificación podemos tener problemas con los acentos y tal Así que la
correcta normalmente especialmente aquí en que hablamos en español utf8 y ahora hacemos un consort del text hacemos un Note 3f file ejecutamos ves Hola mundo vale aquí podemos poner Lore ipsum Oh y ejecutamos otra vez y aquí lo vemos lo mismo hasta aquí bien pero esto es fácil esto parece fácil vamos a crear otro archivo archivo y vamos a ponerle aquí archivo 2 archivo 2.txt vamos a poner agente del chat vamos a codear Mike y log feral vamos a poner mystic coon opsi not Funk bueno Ya está ya está ya está que si no no
terminamos vamos a poner esto y vamos a complicar un poco el tema para que veamos Dónde está el problema de la sincronía y cómo se bloquea el hilo para darnos cuenta que vamos a hacer lo primero vamos a poner aquí conson lock leyendo el primer archivo Y estos dos archivos de aquí los vamos a copiar vamos a ponerlo aquí leyendo el segundo archivo y Aquí vamos a tener el Second text aquí el archivo 2 y vamos a poner el conson lock seconds y ahora vamos a ejecutarlo voy a hacer esto un poco más pequeño para
que me quepa mejor Esto vale vamos a ejecutarlo vale Y fíjate Cómo ha ido la cosa primero se ha puesto a leer el primer archivo lo cuando lo ha leído ha seguido como el loremixum o leyendo el segundo archivo ha ido sincrono no ha ido de forma secuencial primero ha hecho esto luego ha hecho esto luego el consort cuando haya tenido el texto no lo ha hecho de forma secuencial vale Pero cuál es el problema El problema es que podríamos haber estado haciendo aquí cosas por ejemplo aquí podríamos poner hacer cosas mientras lee el archivo
claro hacer cosas mientras lee el archivo esto que tenemos aquí no lo puede hacer no lo puede hacer no puede hacer cosas mientras lee el archivo porque justo Bueno claro que esto Perdón esto lo he puesto aquí o sea primero vamos a ver primero vamos a ver el Lore mipsum pero claro es que estamos esperando leer el archivo Cuando esto en realidad no debería bloquearlo y esto deberíamos poder hacerlo justamente mientras está leyendo el archivo Así que aquí es donde entra justo la sincronía en javascript Y en este caso Cómo podemos hacer esto asíncrono cómo
lo podemos simplificar para hacerlo asíncrono vamos a ver el sistema de asincronía que tiene noujis clásico cómo lo podemos transformar a promesas y Por qué es importante lo primero que necesitamos es utilizar otro método read filet sync no nos sirve porque es sincrono así que lo vamos a cambiar con red file que es la forma asíncrona de leer archivos ahora que tenemos esto claro al ser asíncrono Van a necesitar algún tipo de mecanismo para asegurarnos que una vez que ha leído el archivo vaya a ejecutar el código porque si no no podría saber sabes o
sea entre la línea 4 y la 6 Cómo sabe no y es en qué momento ha terminado de leer el archivo no lo sabe para eso se utiliza un mecanismo que se llama callbacks y los callbacks son funciones que se Ejecutan cuando una tarea ha terminado Así que este rifle acepta como tercer parámetro aquí un callback vale Y aquí en este callback vamos a tener la información de si ha habido un error y además también tenemos en el segundo parámetro ya cuando haya leído el texto Así que lo que le estamos diciendo es Oye mira
ahora ya no lo podemos asignar no es necesario pero lo hicimos Oye mira que quiero que me leas este archivo que me lo codifiques con esto y que cuando termines de leerlo sigas ejecutando este código de aquí pero tú mientras sigue ejecutando esto no me esperes O sea yo Ya te avisaré y cuando te avise entonces ejecutas este callback pero solo Cuando yo termine vale o sea no me esperes ya yo ya te aviso no te preocupes así que la importancia de los callbacks ahora si cambiamos este código y lo ejecutamos pues me peta porque
me voy a function Ah porque he puesto que he hecho aquí o sea me he equivocado que el riffile donde tiene el callbard Cómo se nota que hace mucho tiempo que no lo hago tweet file 3D vale Ah no pero si lo he hecho bien no invalid Ah perdón perdón no no Esto está bien el que está mal es el de abajo ya está igual me lo habéis dicho en el chat eh lo habéis dicho en el chat no el que está mal es el de abajo que no lo he cambiado que no lo he
cambiado claro es que también tenemos que hacer lo mismo Perdón también tendríamos que hacer Esto justamente teníamos que hacer Esto vale lo interesante con el de abajo es que como ahora tenemos un callback ya no necesitamos ni guardarlo en una constante y ya no colisiona el nombre del parámetro no el utc puede ser con guión o sin guión Ahora sí lo que estamos diciéndole es que lea el archivo que me lo codifique y que ejecute esta función cuando termine de leerlo vale Y aquí pues nada lo mismo El rifle y tal Y fíjate que aquí
Lo bueno es que al ejecutarlo a ver ahora fíjate que está leyendo el primer archivo se pone aquí hacer cosas Fíjate que esto se ejecuta antes esto se ejecuta antes antes que devuelva la información del primer texto Vale y lo puedes ver más claro aquí mira primer texto vamos a poner esto y este es el segundo texto segundo texto Vale y el segundo texto lo tenemos aquí para que lo veamos más claro ves leyendo el primer archivo aquí se pone a hacer cosas mientras está leyendo el archivo incluso empieza a leer el segundo archivo esto
empieza a ejecutar la línea 11 fíjate Aquí empieza a leer la línea 11 incluso antes que termine la primera está haciendo cosas asíncronas aquí donde está justamente la clave vale Y cómo está haciendo esto esto lo está haciendo porque él tiene un proceso principal pero todo lo que son las entradas y salidas y lo veremos mejor en la segunda clase con el evento lo que está pasando Es que esto está totalmente fuera del proceso principal y por lo tanto no está bloqueando lo que está pasando por aquí es que leí el primer archivo hace cosa
mientras lee el archivo empieza a leer el segundo archivo eso lo dejan una cola vale Y fíjate lo que ha pasado y cómo de interesante en la sincronía es que no podemos saber en qué orden nos va a llegar y por eso son importantes los callbacks Fíjate que aquí ha llegado antes el segundo texto que el primer texto Pero esto es súper interesante porque así nosotros nos tenemos que preocupar ya sabemos que el callback se ejecutará cuando ese evento termine ahora ya sabemos los que son los callbacks función que se ejecuta cuando se completa una
tarea asíncrona pero la pregunta del millón seguramente mucha gente dirá bueno Esto está muy bien pero qué pasa con las promesas qué pasa con las promesas no vale vamos a copiar en otro archivo esto y vamos a pasar esta información a promesas por fortuna no Yes desde ya hace bastante versiones tiene una forma de hacer esto Con promesas de forma que ya no te tienes que preocupar de utilizar callbacks para hacer eso lo único que tienes que hacer en lugar de utilizar el fs tienes que utilizar fs barra promises y esto lo que hace es
automáticamente transformarte esto para que en lugar de tener que utilizar callbacks utilice promesas Así que ahora le puedes decir que cuando ridfile devuelva y se resuelva La promesa entonces haces el conson log el primer texto y esto lo mismo lo podemos pasar a una promesa Y resolverla que cuando tengamos el texto tenemos el segundo texto Fíjate que aquí pues va a pasar exactamente lo mismo como son promesas estamos hablando de código asíncrono y por lo tanto mientras lee el primer archivo podemos hacer cosas mientras lee el archivo empieza a leer el segundo archivo se resuelve
primero el primer texto y luego se resuelve el primero pero esto sería utilizando promesas igual que hemos hecho lo de los callbacks muchos módulos de nous ya tenéis la oportunidad de utilizar barra promises porque de forma histórica siempre no llega utilizado callbacks que han sido la forma clásica porque no existían las promesas al principio luego poco a poco han ido migrando promesas Y entonces Os recomiendo mucho que vayáis a la documentación y veáis cuáles tienen promesas Cuáles no tienen promesas cuál se puede transformar Y tal Pero es interesante que sepas también que tiene una forma
de transformar callbacks imagínate Por lo que sea que este este sea Con promesas este de aquí no tiene el barra promises vale este no existe Pues por suerte no.s sabiendo que todo el mundo quiere utilizar promesas Pues aquí Vais a tener la oportunidad de utilizar el promisefy Esto está en reward en útil vale Y si no me equivoco Entonces se debería usar promesas y según el caso para optimizar el uso del fredo solo se debería usar una de esas formas ya sea promesas así Kawaii jazz cualquiera mejor que asin que sínton vale syn siempre es
el que va a dar problemas porque está bloqueando y esperando a que termine esa tarea para seguir haciendo la siguiente siempre siempre hay que utilizar la sincro que sea sincawit que sea promesas lo que sea luego habría que entrar al detalle para ver cómo de paralelo secuencial se puede hacer de hecho ahora lo vamos a comentar primero lo vamos a comentar Esto del promise que esto sacáis de Note 2 puntos Útil es una utilidad especial se llama promisefy que lo que podéis hacer es crear la versión de promesas de una que no sea de promesas
en este caso veis que aquí no estoy sacando la versión a las promesas y aquí al pasarle el promisify le pasáis el ridfire os crea la versión de promesas vale el promise y ahora utilizaríais esto y esto lo volveríais a poder utilizar como si fuese una promesa Pero obviamente lo que os digo es que siempre que podáis utilicéis el nativo el que ya está preparado esta utilidad de promises yfy solo la tienes que utilizar En aquellos casos en los que por lo que sea no se está dando una versión Con promesas vale pero que sepáis
que existe una forma de transformar de callback a promesa En el caso de que no no exista vale esto no lo voy a guardar Pero mira os lo voy a lo voy a comentar solo para que lo tengáis Esto me lo voy a poner por aquí esto lo voy a cerrar y os voy a poner esto de aquí vale esto Solo en los módulos nativos que no tienen promesas nativas Vale y Bueno solo para que lo sepáis no porque hay gente que pues que a lo mejor Ahora tiene la pregunta vale Esto está muy bien
de promises vamos a ver en la SIM Kawaii no igual que hemos hecho promises una vez que ya tenemos las promesas ya podemos utilizar en la simcawaii O sea ya sería sinkawaii sin ningún tipo de problema luego os explico por cuándo utilizar callbacks cuándo utilizar promesas Y cuándo utilizarás en Kawaii para que lo tengáis un poquito Claro pero vamos a ver un poco en la SIM Kawaii en la SIM Kawaii una cosa que podéis hacer el problema que hay con la SIM Kawaii es que no podéis utilizar el awaiid aquí no podéis hacer esto porque
en common GS esto no funciona esto sería text y aquí pues podríamos hacer con softlock primer texto text esto no funciona así porque en comonji es el sistema de módulos clásico no tiene acceso a esta forma de utilizar el asenka White y por lo tanto lo tenéis que envolver en alguna cosa no podríamos hacer esto con la SIM Kawaii y esto Vais a ver que no funciona cuando lo ejecute fs sin kwait me va a decir que en la web solo es válido en funciones asíncronas Entonces qué pasa que tenéis dos opciones una opción es
pasarlo a módulos vale esto lo cambiáis a mjs cambiáis el recuair lo cambiáis a módulo vale Esto hace un import vale tenemos una imagen module como hemos comentado antes y esto Ahora pues sí que funciona bueno no funciona Porque algo hecho Ah porque he cambiado la extensión mjs vale veis Y ahora funciona correctamente Por qué pasa esto pasa porque los X Max screen modules sí que tienen el soporte de utilizar await en el cuerpo del archivo esto se llama top Level awake en común Yes no lo podéis hacer y en el macri module sí que
lo podéis hacer entonces cómo lo podéis arreglar en el otro a ver lo podéis hacer con una cosa que se llama una función autoinvocada Así que aquí lo que podrías hacer vamos a poner otra vez el require vale y esto lo explico porque lo Vais a ver y es muy típico que lo veáis en algunos archivos viejos de no vale vamos a tener aquí una función fíjate una función autoinvocada Qué significa esto pues que vamos a hacer esto vamos a tener aquí una función esta sería la función que la envolvemos aquí fíjate con unos paréntesis
porque la invocamos justamente después luego lo simplificaré para que no lo tengas para que no te vuele la cabeza pero entiende que es esto es una función que hemos envuelto con paréntesis y la estamos invocando justo cuando la estamos creando Esto es lo que se le llama una ifi que significa inmediatez function expression Entonces lo bueno es que aquí ya puedes hacer que esto sea no funciona asíncrona y todo este código que utiliza wait lo puedes meter aquí dentro y con esto pues ya lo tendrías arreglado haces el Note vamos a este que sería el
normal espérate no me funciona qué he hecho con el cual está bien no rico Ah no está bien espérate esto es un problema por no usar linternas y esto está súper chulo Esto está súper chulo Qué risa a ver si alguien Exacto falta el punto y coma y esto es culpa mía esto es culpa mía el tema es que me está intentando ejecutar el require este de aquí porque esto es muy muy interesante porque cuando es verdad que os he dicho que los puntos y comas son opcionales pero fijaos que son opcionales pero son requeridos
porque ya bastille los pone automáticamente si no lo hay lo que está pasando aquí es que yavascript cree que estoy intentando hacer esto porque no hay un punto y coma aquí entonces luego lo arreglaremos porque vamos a utilizar linter vale la forma en la que se utiliza para la gente que no utiliza punto y coma es hacer esto y si no pues tendríamos que utilizar punto y como al final y no teníamos este problema esto el inter te lo arregla y te lo dice y ya está muy bien pues ya tendríamos esto aquí y ya
está aquí ya lo tenemos arreglado y esto ya está funcionando para que entendáis bien la sífi para quitarle la magia para que no te asustes porque hay mucha gente que se asusta Con la syfy porque esto es muy raro que no sé qué no raro simplemente Imagínate que tú tienes aquí una función una function que le llamas init o Start o Main yo que sé como en rust que se llama men pues o init vamos a llamar Lady Pues aquí en init fíjate tú tienes esta función init vamos a copiar aquí pam pam pam lo
ponemos todo esto aquí pues esto es como si hicieras esto es esto es exactamente lo mismo Solo que lo hemos hecho de una vez pero aquí lo que estamos haciendo es crear la función y ejecutarla después lo otro de la ifi esto es exactamente lo mismo Solo que es anónima y lo estamos mientras lo creamos lo está haciendo automáticamente y aquí Lo tendríamos y funciona con asinka wave está bloqueando no está bloqueando está siendo secuencial pero eso es saber entender Qué es asíncrono secuencial que es síncrono son cosas diferentes hacer algo totalmente asíncrono pero de
forma secuencial otro en paralelo y otro secuencial o sea sincrono vale son tres cosas diferentes sincrono asíncrono secuencia y luego a síncrono en paralelo vale son cosas diferentes esta Sería con la SIM Kawaii tenemos las promesas y las inca White vale con el import que es el que yo recomiendo y en este caso vamos a terminar ya todo el tema de esta sincronía el rifal y todo esto vamos a tenerlo vale vamos a poner esto tututu y vamos a poner paralelo Para que veamos las tres diferencias no teníamos el asíncrono con callbacks tendríamos la sincrono
secuencial y tendríamos aquí ahora el Paralelo Cómo podemos hacer el Paralelo lo que podemos hacer aquí es simplemente tener las promesas que queremos que queremos crear queremos que era promisol y vamos a tener aquí la lectura del primer archivo y aquí la lectura del segundo archivo y Aquí hacemos que cuando se resuelva vamos a tener los dos textos y Aquí vamos a poner enseñar el primer texto y el segundo texto cosas buenas y malas de esto lo bueno es que esto va a ser más rápido porque estamos haciendo dos trabajos en paralelo en el otro
código estamos leyendo primero un archivo y luego estamos leyendo segundo archivo o sea lo estamos haciendo en secuencial en asíncrono Porque mientras se lee el archivo ese proceso está desbloqueado pero lo está esperando Igualmente no está haciendo nada no está aprovechando estar libre en cambio aquí lo que estamos haciendo es Oye directamente me vas a leer los dos archivos y cuando termines de leer los dos archivos entonces continúas vale Así que lo que estamos haciendo aquí es paralelizar la sincronía lo bueno también es que vamos a asegurarnos Cuando lo ejecutemos cuando lo hagamos en paralelo
vamos a ver para leer a ver vamos a ver que sí que tenemos primero el primer texto y el segundo texto porque nosotros somos los que estamos controlando justamente aquí vale justamente aquí lo que estamos haciendo vamos a hacer un croquis para que no nada se pierda vamos a tener primero la versión sincrona que esta sería la versión vamos a poner aquí la versión claro No hemos hecho la versión sincrona voy a poner aquí la versión sincera sync y vamos a poner aquí read filet sync vale voy a hacer os voy a dejar aquí un
ejemplo sin trono para que lo tengáis y aquí tendríamos pues text primer texto vale Y aquí vamos a tener el segundo texto esto es que es bastante importante y es normal que no entendáis a la primera tampoco sintáis mal que luego la gente cuando estas cosas que yo entiendo que son un poco más no son complicadas Esto no se entiende escuchando esto se entiende practicando porque muchas veces la gente se cree que es que la sincronía es difícil es que nadie me la explica es que nadie te la tiene que explicar es que también tú
lo tienes que vivir tienes que entender y ver el orden en el que se ejecuta el código Entonces es súper importante que estos ejemplos que yo he estado poniendo tú también te pongas a practicarlos y a entenderlos porque si no la sincronía no no viene como la Virgen María y de repente estás embarazado de la sincronía sino que es que la tienes que entender a base de código venga síncrono esta sería la forma síncrona vale leyendo el primer archivo le esperamos y tal venga Entonces el síndrome vamos a poner que es este fichero os lo
voy a dejar aquí de referencia por si acaso Y qué es lo que hace esto bueno Esto lo vamos a poner que esto sería el read sing del primer archivo vale read file SIM del primer archivo primer archivo Vamos a ponerle un poquito más grande más grande vale esto lo que hace el primer archivo y riffile del archivo 2 vale muy bien Esto es simple no y por lo tanto lo que está pasando aquí constantemente Es que esto imaginad que esto es el proceso vamos a ponerlo Así vamos a poner que esto se quede por
atrás pongamos que esto es el proceso Este es el proceso Vamos a ponerle aquí proceso Vale y vamos a poner rojo proceso vale el proceso el proceso cuando está en rojo rojo es ocupado vale rojo es ocupado y verde vamos a poner que verde verde es libre vale súper importante rojo ocupado verde cuando es síncrono que es el primero que tenemos de este fichero que tenemos aquí está pasando esto leemos el primer archivo de forma síncrona lo está esperando y fíjate el proceso está ocupado todo el rato está ocupado está ocupado todo el rato porque
está leyendo el primer archivo esperando y ocupando el proceso venga ahora vamos con asíncrono secuencial asíncrono secuencial vale que este es el que hemos hecho con este de aquí Así que os pongo este por acá y Vais a ver la diferencia Cuál es la diferencia entre estos dos que parece el resultado va a ser el mismo obviamente pero es diferente porque porque lo que tenemos aquí aquí esto lo vamos a tener ocupado Al principio vale lo tenemos ocupado Al principio pero resulta que aquí va un rato así más o menos una cosa así que va
a estar bueno claro es que ni siquiera va a estar libre un poquito vale No sé vamos a poner algo así vale Y esto lo ponemos verde vale luego lo ponemos aquí rojo y luego lo vamos a poner verde y luego vamos a poner rojo otra vez vale este verde hasta el final vale Y aquí le vamos a poner rojo Qué es lo que está pasando aquí aquí lo que estamos diciendo primero es Oye Léeme esto pero me lo haces de forma asíncrona Vale entonces aquí no tiene nada que hacer vale aquí no hace nada
porque resulta que no tiene ningún tipo de de tarea y tal va sigue leyendo el código y se encuentra de repente que tiene que leer también este fichero no dice que tengo que leer también este fichero de forma synclora vale muy bien perfecto y aquí lo que está haciendo en todo este rato es nada está esperando está esperando No no está haciendo nada porque los está leyendo de forma sin Granada qué es lo que pasa que aquí después tenemos del callback 2 y el callback 1 qué es lo que pasa aquí pues que resulta que
como esto es en asincrono vamos a hacer esto aquí este de aquí termina primero así vale esto lo vamos a poner blanco y este termina aquí y entonces retoma donde lo dejo vale bien hasta aquí bien o sea lo que está pasando aquí es vas a hacer este trocito y mientras esperamos vale mientras estamos esperando que termines yo no hago nada porque lo que estoy haciendo es esperar o sea estoy esperando el evento que me indique que ha terminado de leer archivo Y entonces se encuentra con otra vez esto hizo ostras que tengo que leer
otro bueno no pasa nada porque así pues voy leyendo Vale Voy leyendo y aquí lo que están haciendo es leer el archivo Aquí está leer aquí están leyendo y cuando termina de leer cuando termina de leer Pues el primero que termina en este caso termina Aunque parezca raro Aunque al principio pues ha sido aquí el primero ha empezado leyendo este pero el primero que ha terminado ha sido este pues ejecuta el callback cuando termina y ya está el callback o aquí pues el código el código de después en este caso más que el callback sería
el código después y no el callback aunque con callback Sería callback con la promesa Pues aquí sería la promesa callback o promesa resuelta vale voy a poner callback 2 txt Vale y vamos a poner aquí archivo punto txt callback o promesa resuelta pero fijaos la diferencia porque aquí está libre esto es clave esto es clave porque en esto nuestro procesador no está sufriendo y no está pasando absolutamente nada y luego tendríamos el último no que sería en paralelo en paralelo el Paralelo que hemos hecho el último el paralele este y os lo dejo aquí para
que tengáis la referencia en lugar de hacer esto como en dos lo que hemos hecho es poner uno al lado le hemos dicho Vale pues estos dos me los haces a la vez vale los haces a la vez no los hagas uno detrás del otro no me no me esperes mientras uno lo hace y luego el otro y cuando terminen los dos vale aquí lo estamos dejando todo libre todo esto sería libre todo esto claro esto mejor no todavía porque lo está haciendo libre y aquí lo que tendríamos sería simplemente solo una promesa todo resuelto
Entonces esto cuando sería Pues sería cuando terminen ambos no solo cuando termine uno así que esto podríamos hacer aquí aquí está haciendo los dos trabajos Bueno vamos a dejarlo así vale que están dejando haciendo los dos trabajos a la vez lo haría aquí lo que pasa es que no es que termina uno sino cuando terminan los dos pero mientras no está haciendo absolutamente nada y ya lo tendría cuando terminan los dos Entonces está todo resuelto esto lo mejor que tiene es que está leyendo los dos a la vez pero el problema aquí es que no
estaría Bueno aquí es que es que he puesto secuencial pero es que este es el de calva un momento vamos a poner otro momento un momento momento ya se lo explicamos todos quería explicar el secuencial y explica el de este es de callback y vamos a ponerlo bien vamos a poner este es el de callback vale fs read Y ahora os explico bien en secuencias read file Vale y terminamos con el de secuencial que lo teníamos aquí que este lo malo que tiene sí que se va liberando Pero al final no esto sea promesas resuelta
vale esto sería callback y así ya lo tenemos callback y este esto sería dos promesas resuelta y aquí tendríamos este aquí vale lo que está pasando aquí promesa resuelta es que lo está haciendo secuencial por qué Porque hasta que no este sería el de asinc awake normal en este de aquí y esto ya lo puede os puede servir Este ejemplo por siempre de por siempre Mira este Qué pasa que aquí está esperando este y hasta que esto no termina no sigue ejecutando lo siguiente aunque sea asíncrono es secuencial y lo malo de esto es que
en realidad el código parece sincrono se ejecuta Como si fuese sincrono Aunque es verdad que sí que se queda libre o sea el proceso el proceso no se queda pillado lo que quiere decir es que se liberan recursos de que no está utilizando el proceso y no lo está bloqueando esto En el caso de que nosotros queramos escalar esto de node volveríamos que en este caso nos está liberando recursos que es una cosa que no pasa en este que en este lo está bloqueando porque sí que está ocurriendo de forma síncrona y no lo Está
sacando de forma separada el proceso principal y aquí en el siglo secuencial sí que liberas dos recursos mientras lo está leyendo Pero igualmente no tengo ninguna ventaja porque los está leyendo de forma secuencial primero Lee uno lo hace asíncrono pero es que hasta que No termina no va a leer el siguiente Así que aquí tendríamos los cuatro casos Si entendéis estas cuatro estos cuatro archivos ya os habéis pasado la sincronía de javascript de Note y de todo entonces no os preocupéis porque bueno Esto lo Subiré al repositorio para que lo tengáis y ya está pero
el tema del secuencial es que fijaos aunque sea sincrono primero hace esta línea luego hace esta línea aunque esa síncrona Pero es que como la espera hasta que no termina esta línea no sigue la siguiente y los mismo pasa aquí por lo tanto aquí no llegará jamás hasta que este no se resuelva vale porque es secuencial porque va 1 2 3 en cambio aquí en el en el siguiente que hemos hecho que es en paralelo en el Paralelo lo que sí que hemos hecho aquí es Oye Léeme los dos y cuando termines los dos que
me da igual si empieza uno o el otro no me lo haga secuencial de que me leas uno y luego me leas otro Léeme los dos a la vez vale tú me lo lees y cuando terminen los dos me En qué orden Entonces me avisas y Esto va a ser siempre siempre más rápido porque lo estamos haciendo un paralelo que a veces es interesante hacer cosas en secuencial por qué porque hay veces que algo asincrono Depende de lo siguiente es normal esas cosas pueden pasar vale Estas son las cuatro las cuatro la sincronía y tres
a sincronías que las tienes que tener en cuenta Luego con los archivos lo vas a poder ver re practicar reender no pasa nada no te preocupes porque no lo entiendas a la primera no te sientas mal porque sé que muchas veces estas cosas a veces la gente es que si no entiendo la sincronía es que ya la entenderás No pasa nada ahora que ya tenemos todo el tema del file System de la sincronía y tal os voy a comentar otro nativo porque vamos a hacer una pequeña aplicación que os va a encantar que está muy
chula vamos a ver otro módulo nativo este es bastante más fácil que se llama paz que como te puedes imaginar lo que va a decirnos Es sobre el paz de los archivos que tenemos en el pass lo que vamos a querer es construir nuevas rutas de archivos saber si un archivo tiene extensión recupera una extensión crear rutas absolutas un montón de cosas puedes unir rutas unir rutas con path join así en lugar de crearlas porque vas a ver que es mala práctica crearlas vosotros nunca Note Vais a deberíais crear las rutas así por ejemplo Imagínate
que tienes un archivo conten su folder 3.txt Esto está prohibido y por qué está prohibido por el sistema operativo vale Qué pasa que las barras en unix son así pero en Windows son así de hecho fijaos como de importante es el tema de las barras que si hacéis un conson log y hacéis Paz punto SEP esto os va a decir cómo es la separación de las rutas en vuestro sistema operativo y esto a mucha gente se le olvida pero bastante importante Mira ves cuando lo he ejecutado ves que me pone esto Esto es porque en
mi sistema operativo las separaciones con esta barra Pero si tú tienes Windows y ejecutas este código vas a ver que te va a devolver algo totalmente diferente porque te va a devolver la contrabarra Así que este es un tipo de cosas que muchas veces hay que tener en cuenta y por eso existe el paz porque con el Paz Vais a poder unir por ejemplo pues unir rutas con pathjoins Bueno voy a dejar el de El pads SEP que es bastante importante y esto es un error muy común que se cometen no y es no que
es olvidarse de todos los sistemas operativos que podéis utilizar barra separadora de carpetas según sistema operativo unir rutas por ejemplo mira el fire pass si tú tienes esta ruta content/sup folder test pero en Windows sería de otra forma lo que puedes hacer es utilizar el path join entonces tú le pasas cada parte de la ruta y entonces lo crearías así vale Y así te crea la ruta perfectamente sin necesidad de que tú pongas nada Bueno de hecho aquí he puesto la barra esta pero no es necesaria Y entonces si ejecutamos esto vale ves tendríamos aquí
content su folder De hecho aquí podríamos ponerle el punto también para que por la actual a pues no nada me ha dejado fatal Porque si hacemos Bueno yo creo que si hacemos así igual También ves también me va a poner content directamente así vale o sea me imagino que es lo mismo qué más tendríamos el nombre de un archivo por ejemplo mira imagínate vamos a poner que tenemos aquí barra tempe barra midu Secret files.tmx o password.txt el lo que te da es el nombre del fichero vas a tener ahí ves password.txt Vas a conseguir de
una ruta completa vas a tener como el nombre del fichero y puedes incluso utilizando esto Exactamente lo mismo le puedes decir Oye Quiero el nombre del fichero y le puedes decir quita el punto txt y ahí tendrás Pues el nombre del fichero sin la extensión ahora deberíamos haber password uno de los más útiles del Paz es la extensión la extensión este se utiliza bastante paz.exname y tú Aquí le pasas por ejemplo image.jp vale esto así no Y ves te da la extensión alguien diría pues qué tontería porque esto lo podrías hacer a mano porque es
que lo primero que tendrías que hacerlo de forma muy imperativa y lo segundo es que hay veces que tú puedes tener ficheros Como por ejemplo yo que sé miles super y match.jp cosas así no Y fíjate que te da la extensión correcta No te da los primeros puntos no se lía sabes te da la extensión definitiva que hay al final así que por eso bastante importante y este se suele utilizar bastante más de lo que la gente de lo que la gente cree vamos a crear nuestra primera aplicación y os lo voy a dejar como
ejercicio para que Ahí os divirtáis todo lo que queráis seguro que lo conoces El Comando ls El Comando ls es que podéis ir a cualquier carpeta o lo que sea no ponéis ls es como hundir y Ahí os dice pues como son las carpetas que tenéis si tenéis ficheros podéis decirle cuánto ocupa y todo esto ahora que ya sabemos el file System vamos descubrir una herramienta más vale tenemos el file System hacemos Note 2 puntos y cuál vamos a utilizar pues tiene una que se llama fs readdir que lo que hace como bien Dice el
nombre es leer el directorio aquí podemos decirle Por ahora vamos a decirle que lea el directorio actual Vale y tendríamos aquí un callback donde tenemos el error y los archivos en los callbacks siempre el error es el primer parámetro y esto está hecho aposta justamente para que no se te olvide manejar el error para que si tienes un error estés obligado Porque si fuese el primero el files y el error fuese el último que no es el caso la gente se olvidaría siempre del horror Pero esto te obliga a pensar que está y el error
esperándote así que por eso lo pone en el callback el primero por si te habías preguntado por qué lo ponen a Primero aquí puedes ponerle alrededor del directorio y aquí podríamos tener el error y además ponemos un retur para evitar seguir ejecutando nuestro código ahora que estamos leyendo esto podríamos tener todos los ficheros y por cada fichero vamos a del file Aunque ahora verás que esto lo vamos a ir iterando muy bien esto sería nuestro ls más básico del mundo podríamos ejecutarlo ya Note punto ls.js y fíjate ya tenemos aquí como un listado de Los
ficheros ya estamos haciendo un ls es un primer paso es algo humilde simple Pero esto nos va a permitir ahora ir haciendo en crescendo cosas mucho más interesantes que vamos a ver que nos va a permitir llegar a cosas muy potentes no se puede manejar el error con un try Catch en este caso no porque el callback ya te lo está dando en el parámetro en el try Catch lo podríamos hacer justamente cuando en el fs se utilizaremos el de promises Entonces esto de repente ya se transformaría en una promesa y podrías tener aquí un
den con el files vale súper fácil y el error lo tendrías por ejemplo en el Catch vale aquí tendrías esto esto aquí y aquí tendrías un Catch y lo podríamos pasar también como hemos visto antes en una SIM car White y también pues manejar lo que nacen Kawaii para ver si el archivo existe tienes diferentes por ejemplo tendrías el exist Bueno claro Es que aquí he puesto el promised no tiene el exist pero podrías hacer el stat el stat que es el que te da la información del contenido de un archivo al utilizarlo te diría
si existe o no existe si te da un error pues es que no existe antes de continuar un objeto global bastante importante porque ya veis que este ls es un poco aburrido porque siempre está buscando en el punto siempre está buscando en el directorio en el que está y no le podemos pasar el directorio entonces Os voy a explicar un objeto bastante importante en ojies que es el objeto process es un objeto global que proporciona información y control sobre el proceso actual de ejecución lo tiene clarísimo que me la apuesta hasta en coreano tiene propiedades
y métodos que te van a permitir interactuar con el entorno de ejecución de noies y te va a dar información que está relacionada con el proceso actual por ejemplo cosas que podría tener el proceso actual Pues los argumentos los argumentos de entrada a la hora de ejecutar nuestro Comando nuestro proceso cómo lo recuperamos como conson lock process.arp Qué significa este Art Bueno lo que significa pues son los argumentos que está recibiendo en la v la verdad que no tengo ni idea Qué significa primera vez que me lo pregunta pero bueno son los argumentos que va
a recibir en la línea de comandos qué argumentos son cuando tú ejecutes algo aquí y haces 7 process.js si aquí pongo Twitch curso Note Hola Y ejecuto esto Fíjate que aquí tengo una red con todos la línea de comandos no los argumentos que ha recibido primero tendríamos el que ha utilizado que aquí tenemos toda todo el paz Que fíjate dónde ha sacado Note lo ha sacado de fnm luego tendríamos el archivo o sea aquí tendríamos 7.prosses.js Entonces el primer elemento que es este de aquí es este note el segundo de aquí sería el archivo que
hemos estamos evaluando y luego tendríamos Twitch en la tercera posición curso la cuarta posición ves es una forma en la que podemos recuperar los argumentos Y esto es lo que nos va a permitir justamente poder configurar cualquier cosa que nosotros hagamos si hacemos una línea de comandos si creamos una Api la creamos poder configurar pasándole argumentos este tipo de cosas Lo vamos a poder hacer así también podemos controlar el proceso el proceso y su salida podemos salir del proceso utilizando process exit y le podemos decir cómo tiene que salir proceso con cero es que todo
ha ido bien y el proceso tiene que terminar ahí con uno es que ha habido algún error y queremos que salga porque si no se puede quedar tonto o lo que sea podemos controlar eventos del proceso podemos decirle vale voy a escuchar los eventos de que cuando salga Pues aquí podríamos limpiar los recursos por ejemplo o limpiar la consola o lo que sea no podemos Escuchar eventos del proceso también errores en concreto errores que no hayamos controlado que se pasan como eventos También tenemos métodos como el current working directory current working directory podemos recuperar este
process directory nos dice desde qué carpeta estamos ejecutando el proceso por ejemplo vamos a quitar el bloque este que haya puesto los argumentos que es el que vamos a utilizar ahora si yo ahora ejecuto Esto vale Fíjate que no me ha puesto directory no ha puesto nada porque por qué no me sale porque he puesto este proceso sexy y entonces está saliendo el proceso Antes de que lo ejecute claro normal normal normal ahora sí vale ves Este es el current working directory y que es importante esto porque hay veces que a lo mejor Tú ejecutas
desde otro sitio este fichero podríamos ir aquí y decir vale aquí quiero que me ejecutes desde la carpeta de lo que está dentro de curso no Yes barra 7 process.js y fíjate que el current working directory ahora es diferente porque en realidad el proceso lo estoy ejecutando desde otro sitio No es que me está dando Dónde está el archivo lo que me está diciendo es desde dónde estamos ejecutando el proceso vale desde qué carpeta hemos inicializado Cuál es el directorio en el que estamos trabajando Y fíjate que ahora es diferente respecto con el que teníamos
antes volvemos Aquí y ahora que ya sabemos el proceso que es muy interesante tiene un montón de información de hecho tenéis más información por ejemplo la de la plataforma lathon vale aquí podéis utilizar process punto y aquí veréis que tenéis desde la ID del proceso tenéis la plataforma que lo está ejecutando Hay un montón de información el uso de la cpu Hay un montón o sea que podríamos estar aquí todo el Pero uno de los que más utiliza es las variables de entorno vale aquí tenéis variables de entorno Como por ejemplo el entorno de si
se está ejecutando para producción O desarrollo las variables de entorno que nosotros le pasemos Por ejemplo si yo le paso una variable de entorno aquí directamente y le pongo Pepito es igual a Hola Y ejecuto aquí en Note 7.2 es punto js ves que aquí aparece este Hola Este Hola Es por el valor que ha tomado de Pepito porque le estamos pasando como variable de entorno esto lo veremos más adelante porque es bastante importante lo repasaremos Pero bueno para que sepas que todo esto se saca de él el proceso un objeto global con información y
métodos para manejar del proceso y obtener información ahora que ya sabemos esto hombre pues aprovechamos este procesar que es el primero que hemos visto y podemos volver a nuestro ls no el ls que hemos hecho vamos a volver vamos a crear otro ls aquí ls Advance Vamos a ponerle vale vamos a tener el ls como el más sencillo y vamos a volver a este para hacerlo un poquito más interesante vamos a poder pasarle la carpeta en la que queremos hacer el list no que queremos listar los archivos y todo esto y sacamos del process Art
de la segunda posición porque la posición 0 ya hemos visto que es note la posición 1 ya hemos visto que es el fichero y vamos a utilizar la segunda posición Aquí vamos a decirle que nos no vamos a utilizar el folsey vamos a utilizar el nulis Collection operator y vamos a decirle que por defecto sea el punto y ya está ahora en lugar de esto vamos a pasarle el folder y esto que nos da Pues nos da que ahora vamos a poder decir Note 8 ls Advance vale podríamos no pasarle nada nos está listando la
carpeta actual pero ahora ahora sí le podríamos pasar por ejemplo que nos diga de esta carpeta aquí cjs por ejemplo punto barra cjs ves y ahora me está alistando la carpeta cjs o le podría decir la de mjs qué pasa que si le decimos algo que no existe Pues me va a decir error al leer el directorio no existe este fichero directorio y esto Gracias a que estamos manejando el error Si no manejamos los errores tenéis que saber que esto nos va a petar pero mal porque al hacerlo ves ya nos da un error que
el proceso además revienta el error es el mismo pero fíjate que es un error interno y que nos dice Trigger and out exception esto quiere decir que es una excepción un error que nosotros no hemos manejado esto es una cosa que Vais a querer evitar siempre esto si lo veis alguna vez significa que algo muy mal tenéis y que lo tenéis que arreglar Por qué Porque en un Catch podéis hacer que vuestro código no reviente Qué quiere decir pues que después del Catch vosotros aquí podéis ejecutar otra cosa podéis hacer lo que queráis si no
hacéis el return podréis seguir continuando que vuestro proceso esté vivo pero si no manejáis la excepción esto lo que hacer es un proceso y os va a reventar el proceso y si es una Api imaginad lo que va a ocurrir es que vuestra Api se va a caer se puede hacer de forma que se levante automáticamente pero el problema es que esto consume recursos va a estar cayéndose continuamente y No vais a saber por qué vamos a hacerlo mucho más interesante y vas a ver cómo de potente es know Yes para todo para todo pero
para que veáis como como esto le quita magia A cómo se hacen cosas como ls no aquí ya tenemos lo del folder estamos leyendo el directorio aquí tenemos el den teníamos lo de iterar cada uno de los archivos y aquí Fíjate que hemos hecho un conson log y a ver no está mal esto no está mal pero me lo lista y ya está yo quiero mostrar información chula lo que podríamos hacer es recuperar la información de cada uno de Los ficheros o sea podríamos recuperar el fire pass vamos a tener aquí un path join donde
vamos a tener por un lado la carpeta que estamos mirando y por otra el file No ya tenemos la ruta del fichero que vamos a listar al leer el directorio ahora que queremos hacer lo que vamos a querer es recuperar información de cada uno de estos ficheros Así que lo que hacemos Es decirle fs stat vale le pasamos el fire path y aquí en el que estos son promesas ves que aquí tenemos la promesa vamos a crear una función le vamos a llamar ls esta función va a recibir el directorio muy bien Esto lo vamos
a pasar por aquí y aquí ejecutaremos ls y le pasaremos el folder esta función asíncrona la ponemos aquí y así vamos a utilizar a simcawaii para que estemos contentos vamos a tener aquí los files y hacemos aquí una White Qué pasa que esto necesitamos aquí hacer un try Catch porque files ya hemos visto que nos puede petar Así que aquí tendríamos un error y le podríamos decir console error y podemos decir no se ha podido no se pudo leer no se pudo leer el directorio vale no hace falta que enseñamos el error sino que simplemente
le decimos que no se ha podido leer el folder vale que sería este folder y aquí muy bien perfecto aquí tendríamos los files vamos a poner files y vamos a ponerlo aquí para poder crear para poder seguir por aquí files muy bien Aquí vamos a hacer proces 1 vale vamos a seguir con un proceso 1 para que aprendamos de salir de forma controlada pero hemos tenido un error Por lo tanto tengo que decirle que salimos con uno ya tenemos Los ficheros ahora lo que vamos a hacer que tenemos todo todos los archivos con todos los
archivos fijaos como todo lo que hemos ido aprendiendo y vamos a poner Aquí vamos a crear todas las promesas de todos los archivos files promises lo que vamos a hacer es mapear cada uno de los archivos que estamos leyendo o sea este archivo este archivo este archivo todos los archivos vamos a mapear Aquí vamos a crear una función a síntoma Qué vamos a hacer para cada archivo lo que vamos a querer es recuperar la información de cada archivo o sea vamos a hacer un stat de cada uno de los archivos vale ya hemos visto que
tenemos que hacer el fire pass vale esto ya lo hemos visto Mira esto Me lo voy a petar porque esto Ya no lo vamos a utilizar esto lo que hemos hecho antes por aquí vale fuera primero tenemos el filepad de cada archivo y ahora vamos a intentar obtener el stat de cada uno Fire stat equivale a wait fs stat punto filepad Para que te acuerdes el stat te da el stat no es estatus es la información información del archivo vale Porque te da un montón de información si es un directorio si no es un directorio
esto lo hemos visto antes hemos visto aquí pero para que veáis que vamos a cerrar el círculo de todo lo que hemos aprendido desde la sincronía hasta el fire System el pass joint y todo para hacer una aplicación muy interesante que te puedes llevar como archivo como deber o como ejercicio el llevarlo más allá y llenarlo de opciones y todo esto fire Start vamos a poner el fire stats Tenemos aquí la información tenemos el fire stats qué podemos recuperar a que tenemos Esto bueno cuando tenemos los stats voy a llamarle stats vale Catch y aquí
en el error vamos a poner no se puede leer el archivo o lo que sea que bueno eso no debe esto no debería pasar pero bueno si estamos aquí ya deberíamos poder recuperar si es un directorio el símbolo de si es un directorio o no esto lo podríamos poner en un sitio podríamos poner también el file type que esto es una cosa que se suele hacer si es un directorio vamos a poner una d y si no vamos a poner un guión por ejemplo vamos a tener el file size vale que esto saca de stats
punto size y vamos a tener cuando se modificó modify vale m-time punto to local Data Stream no tu local Stream Entonces ya tendríamos el tipo del archivo el tamaño del archivo cuando se modificó el archivo vamos a hacer aquí un retum de un templete String vale donde primero tenemos el file type luego vamos a tener el file normal vale aquí tenemos el file O sea ya tenemos ahí el nombre del file Vale ahora vamos a tener el files punto tu String Vale y vamos a poner finalmente el file modify vale vamos a listar para cada
archivo toda su información con esto tendríamos todas las promesas que queremos que se resuelvan Así que aquí bueno o aquí Bueno estamos mapeando O sea que lo tenemos que poner aquí al final vale aquí al final lo que vamos a hacer es esperar todas estas promesas y para pelar estas promesas files info away promisol file promises aquí tendríamos ya toda la información de todos los archivos y ya con esto pues podríamos mostrarlo en consola para cada una de la información que tenemos hacemos un consort de la información y ya está vamos a ver si esto
funciona vale no funciona porque no importado el Paz No pasa nada si todos problemas fueran estos Si todos los problemas fueran estos vamos a ver vale ahora vamos a arreglarlo un poco visualmente para que quede ni colado no Pero bueno ya podemos ver que al menos pues tenemos aquí la información de si es un fichero por ejemplo Esto si es una d es un directorio si es un guión es un fichero Mira vamos a poner una F para que 10 sea director y F de Tal para que quede más bonito podemos utilizar el pad String
De hecho yo creo que esto es lo que utiliza seguramente el ls y todos estos algo parecido entonces del falta y lo dejamos pero aquí le podemos poner un pad en y le vamos a poner 20 de forma que siempre ocupe 20 espacios es String y el fire size le podríamos poner lo mismo pero que empiece por el principio para que así nos deje la separación de lo que ocupa pero al principio y así siempre ocupe esta columna 20 esta columna 10 y así que dé mucho más ordenado y así queda Así que queda bastante
más bonito es verdad que bueno a lo mejor no hace tiempo no hace falta la fecha no sé si el file modify podríamos hacer esto para ver el Time Stand o lo que sea bueno no a lo mejor así vale mejor así pero ya tendríamos esto O sea ahora tenemos mucha más información Es verdad que claro Hay algunos que son un poquito más largos y a lo mejor ocupan demasiado pero bueno Solo para que nos hagamos a la idea No aquí tendríamos ya la información de todos los ficheros si es un directorio si es un
archivo el nombre del fichero cuánto ocupa en bytes Y cuándo fue la última vez que se modificó y esto ya además es parametrizable que podemos pasarle otro folder y nos pasaría otro folder o sea hemos hecho un comando de directorio de listar archivos y tal en un momento no faltarían pues Oye que pueda listar archivos que son ocultos qué tal pero fíjate que hemos puesto en práctica todo lo que hemos aprendido de note el sistema de módulos hemos visto el process sincronía hemos hecho a sincronía que es secuencial porque en este caso pues hasta que
no se leamos el archivo o sea hasta que no leamos el directorio no continuamos porque es imposible que hagamos en paralelo esto con esto verdad porque es imposible porque necesitamos leer todos los archivos del directorio antes de continuar luego también que hemos hecho aquí sí que estamos haciendo un paralelo recuperar la información de todos los ficheros del directorio Por qué Porque eso sí que lo podemos hacer en paralelo no hemos visto también Cómo utilizar el file System no solo para leer el directorio sino para también recuperar la información de cada archivo hemos visto Cómo podemos
utilizar la consola para enseñarlo y no solo eso sino que también si hay un error que no existe la carpeta por ejemplo pues estamos saliendo correctamente de nuestro proceso Y fíjate que hay aquí como una x esto es porque hemos salido con un con un exit 1 o sea hemos dado la señal correcta de que nuestro proceso ha salido incorrectamente fíjate la diferencia que aquí sale en azulito porque hemos puesto process exit 0 pero si lo ponemos con uno como estamos dando la señal correcta de que ha habido un error cosa bastante importante para que
todo funcione correctamente Y si esto lo integramos con otro tipo de sistemas por algún motivo no hiciste stats punto tu String porque no es necesario hacer el to String en ese caso bueno que aquí sí no Bueno pero de hecho bueno a ver lo podría hacer aquí si queréis no sé no sé por qué no lo he hecho también verdad que a ver sí que es necesario porque utilizo el pack Start vale Pero bueno no importa donde lo queráis hacer si os queda mejor ahí pues ahí no cuando más recibe una función asinc ejecuta todo
en paralelo Sí es que esto es un poco polémico pero map Maps si lo hace totalmente todo en O sea no va a estar no va a estar esperando cada iteración de lo que está ejecutando aquí o sea es un poco polémico en el sentido de que la zinc aquí lo que está haciendo es devolver las promesas pero este await no va no va a esperar el agüita este De hecho si ponemos un lo vas a ver aquí más claro vale el map no para el proceso en el a white no lo para vale no
está esperando de forma secuencial ves que he puesto aquí pero para que lo veas si hacemos esto vas a ver que es que salen los dos Y aquí tendríamos por ejemplo el stats vale aquí tenemos stat y aquí te va a sorprender un poco no esto es una cosa que mucha gente le vuela un poco la cabeza Esto sí que es verdad que es más complejo vale Pero el map que es un callback esta esta funciona asíncrona no este awake no va a esperar en secuencial sino fíjate ves que están saliendo dos veces esto y
luego dos veces esto Esto es porque el mapeo ocurre en paralelo todos ocurren en paralelo sabes No es que está mapeando uno está esperando la SIM Kawaii y luego lo otro y luego el otro para hacer eso para hacerlo secuencial tendrías que utilizar el foro pero en este caso utilizamos el porque justamente queremos mapear las promesas y esperar todas de golpe Exacto la mapea todas a la vez Esto es algo curioso no porque es más rápido Claro que es más rápido que más rápido que es más rápido hacer en paralelo 25 cosas o hacer una
o hacer 25 cosas primero una luego la otra luego la otra luego la otra por qué no mapean Los ficheros dentro del primer try Catch y lo haces fuera porque son dos diferentes Y esto es otro problema Esto es algo que normalmente no se hace bien vale o sea normalmente la gente lo que hace es del palo Pues voy a hacer un try Catch que envuelva todo mi código pero claro el problema es que entonces no vas a saber exactamente dónde viene el error no lo vas a poder manejar bien No lo vas a poder
separar bien lo mejor que puedes hacer es intentar siempre que puedas separar el try Catch en lo que tiene sentido no envolver toda tu aplicación o todo tu o toda tu función entiendes sino que intentar ahí donde realmente puede fallar porque vas a tener un control mucho más granular por ejemplo aquí ves este try Pues si tenemos aquí un try justo de esto Claro si lo envolvemos todo aparte de que la anidación es peor que siempre eso ya es un smel No todo lo que la anidación lo haga peor porque si esto lo metemos aquí
ya tenemos un nivel más de anidación o sea justamente estamos como complicando nuestro código y además esto nos permite simplificarlo de forma que lo podríamos separar ahora que tendríamos esto Esto es totalmente lo podríamos ya poner en una función que sea read no por ejemplo pues Lo tendríamos aquí totalmente separado Entonces es mejor es mejor separarlo no que tengáis un try Catch todopoderoso que maneja todos los cats de todos los errores normalmente hacer eso es ser un poco vago o sea lo hacemos porque somos vagos no de no sé me da un poco de pereza
y no tengo ganas y tal Así que eso es lo que os dirían ahora que tenemos esto vamos con el lo siguiente que es en pie vale en pie porque todo esto muy bien hemos visto los módulos nativos de no hemos visto que nosotros mismos podemos hacer módulos pero hay un mundo ahí fuera un ecosistema de módulos inabarcable interminable que te va a ayudar a crear tus aplicaciones mucho más rápido así que te voy a explicar que es mpm Por qué es importante porque es clave que lo utilices y lo entiendas y lo conozcas vale
mpm que hay gente que dice que sí que no y tal en pie se supone que significa Note package manager Aunque Bueno hay una gracia de que dicen que se nos es el nombre oficial y entonces van cambiando aquí te ponen diferentes nombres como nautipash mechas y te van poniendo aquí cada no un polar magnetics te van cambiando el nombre Pero bueno vamos a decir que es el Note package manager un administrador de paquetes de node salió Poco después de Note tiene muchísimos años y es el registro de paquetes más grande de código que existe
o sea no hay ningún ningún tipo de sistema de ningún otro lenguaje de programación y entorno de ejecución más grande y es tremendo es que tienes millones y millones de paquetes es inabarcable qué es exactamente en pie hay que diferenciar dos cosas Una lo que sería el registro de paquetes de código abierto que cualquiera puede utilizar utilizar de forma gratuita que es esto que estamos viendo aquí por ejemplo react no deja de ser un paquete de mpm es un registro público y lo puedes encontrar aquí y tienes diferente información Cuántas veces ha descargado y todo
esto O sea que por un lado tienes que entender Qué bien Es un registro donde tienes un montón de paquetes y dependencias que puedes instalar en tus proyectos y luego por otro lado tienes que entender que mpm también es una línea de comandos que la tenemos aquí ves en pie si haces mpm-versión tendría que aparecerte Qué versión de mpm tienes instalada Así que no confundas no confundas el registro donde tienes los paquetes las dependencias con la línea de comandos Por qué Porque puedes utilizar alternativas a mpm por ejemplo utilizar puedes utilizar mpm que es el
que te viene por defecto con node pero existen otras alternativas como yarm o como pnpm que pueden ser mejor o peor son alternativas que tienen algunas cosas para bien otras para diferente Pero puedes utilizar pnp para instalar las dependencias y seguir utilizando el registro de en pie OK Así que importante entender los dos conceptos el registro que es como Donde están hospedadas todas las dependencias y luego la línea de comandos que es la utilidad que utilizamos en la terminal para instalar o para manejar y administrar nuestras dependencias vamos a ver cómo podemos Además nosotros empezar
a crear nuestro proyecto instalar dependencias cuando queramos instalar una dependencia en un proyecto cuando queremos inicializar un proyecto en Note lo que tenemos que hacer es utilizar yo voy a utilizar la línea de comandos de mpm porque es la más típica pero ya te he dicho que hay alternativas pero yo voy a utilizar la de pie vale ya hemos visto en pie en versión para saber la versión Pero tenemos diferentes comandos el primer Comando que tienes que en cualquier proyecto the note que quieras crear como el que nosotros tenemos es mpm init vale mpi lo
que va a hacer es una utilidad que te va a crear un package on que ahora te explicaré Para qué sirve y lo que te da es pues una descripción en Jason de tu proyecto con las dependencias los scripts la licencia el autor la descripción el título la versión un montón de cosas aquí nos está preguntando ya nos está diciendo por ejemplo Cuál es el nombre del paquete Vale pues curso de node la versión le decimos 1.0 la descripción el mejor curso de node por cero euros vale el entry Point el entry Point es importante
porque es el punto de entrada de nuestro proyecto Por ejemplo si vamos a crear una Api cuál sería el entry Point Pues sería ese archivo que al ejecutarlo con node es el que va a levantar toda nuestra app en este caso ya hemos visto que no tenemos un entry Point pero de vez en cuando sé que hemos tenido alguno No porque he estado creando con index.js y cosas así en este caso voy a poner indjs para olvidarme porque no es importante vale Pero ten en cuenta que luego sí que cobrará más sentido El Comando de
testing veremos testing en este curso No te asustes pero veremos testing lo voy a dejar vacío por ahora pero haremos testing y verás que es importante también el repositorio de git aquí le podéis poner Cuál es el repositorio que estás utilizando en este caso utilizamos este pues lo ponemos para que sirva de referencia para cualquier persona que por lo que sea vea nuestro proyecto las keywords podemos poner curso Note 10 el autor pues Miguel Ángel Durán García vale la licencia aquí podríais poner que Smith lo que sea por defecto os pone isk pero la que
vosotros queráis y este es el package on que os va a crear vale le decimos que vale le damos al enter si no os gustan las preguntas si no tenéis ganas de perder tiempo que sepáis que podéis hacer mpm init guión in Yes o guión y ya está os crea todos los valores por defecto y ya está pero bueno si queréis saber paso a paso que lo que está haciendo pues ya sabéis lo que tenéis que hacer fijaos que cuando hemos inicializado el proyecto aquí nos ha creado ahora un package punto Jason y al abrirlo
pues tenemos esta estructura un Jason con todo lo que hemos dicho el nombre la versión descripción Main Y esta es una de las partes más interesantes los scripts que son comandos que podéis ejecutar pues para levantar el proyecto para ejecutar los test para alimentar esto lo iremos viendo porque son clave y son muy muy interesantes la licencia el autor y todo esto pero fíjate que no tenemos ningún tipo de dependencia y queremos en nuestro en nuestro proyecto este del ls que hemos hecho vamos a querer utilizar una dependencia que se llama pico-colos Para qué sirve
pico-colos Bueno pues es una dependencia muy pequeña y muy interesante que nos va a permitir dotar de vida a nuestro cónsul log Porque nuestro consort Ahora se ve muy aburrido cuando lo estamos ejecutando el proyecto fíjate que se ve todo como Pues nada todo gris todo gris aburrido No sé tenemos que llamar la atención vamos a querer utilizar la dependencia de pico-colos qué podemos hacer podemos ir al repositorio y ver cómo se llama la dependencia en cuanto veamos cómo se llama dependencia ya sabemos que Esto va a ser como tenemos que hacer el envío mixtol
o podemos seguir ampmy js y buscarlo aquí podemos Buscar pico colors vale pico colors Y fíjate que aquí directamente te está dando ya El Comando lo podemos copiar en pmp vale mpm la i de install que también lo podrías hacer directamente como install pico color lo ejecutamos y cuando termina si vamos al packa Jason nos vamos a encontrar que ahora nos lo ha actualizado y nos ha puesto dependencias el nombre de la dependencia y la versión Fíjate que aquí nos ha puesto un caret este simbolito de aquí se llama caret y lo que quiere decir
es que esto si el día de mañana pico color saca la versión 1.01.02 o la 1.2 esto nos lo va a instalar vale el caret lo que va a hacer es que todo que sean más personas que no sean 2.0 3.0 y tal sino que suba la feature o la el fix lo va a actualizar Así que tenlo en cuenta a mí una cosa que me gusta por buena práctica para evitar este tipo de problemas porque no todas las dependencias controlan las versiones que instalan y yo sé que suena muy bien el hecho de voy
a tener siempre las últimas versiones suena muy bien pero a veces el tener siempre las últimas versiones sin tú comprobarlo y testearlo y asegurarte que todo funciona te va a reventar las cosas vale Así que ten cuidado Así que yo lo que te recomiendo Es que quites el caret y que te instales alguna extensión como esta la de versión lens la versión del sol les ves que te pone ahí un laters Fíjate que si yo aquí pusiera que tuvimos la 0.8.1 ves me detecta que la ley es en la 10 y ya directamente puedes darle
aquí y actualizarla a esto se le llama semantic semantic versionning No donde este la x 00 bueno la x sería la mayor no cuando rompe la compatibilidad la i es la menor y la z sería un backfix un Bach Y tal Pero qué pasa pues que esto no lo sigue todo el mundo por ejemplo tabscript no sigue esto no sé si lo sabíais Vale pero type no sigue la semántica inversioning lo que quiere decir es que a lo mejor por lo que sea puedes tener el problema de que typescript arregla un Patch arregla un Back
y se carga todo tu proyecto y te lo comes con patatas Así que nada tienes que tener cuidado con estas cosas ahora que ya tenemos esto yo lo voy a dejar ahí fijado pues vamos a poner pico-colos y vamos a importar pico colors Así que nada const podemos poner pico colors con el require Fíjate que aquí no ponemos ahora Note 2 puntos porque aquí lo que tenemos es pico-colos de dónde sale este pico color de dónde ha salido esto dónde o sea dónde me ha instalado esto Fíjate en otra cosa además de actualizarme el packa
Jason una vez que he hecho el Empire me ha cambiado una cosita muy bastante muy potente en mi proyecto Y es que me ha creado una carpeta que se llama know modules en la carpeta no modules vamos a encontrarnos que tenemos la carpeta pico colors y en pico color Tenemos aquí todos los ficheros de esta nueva biblioteca básicamente es como si hubiera copiado y pegado nuestra biblioteca picolos en nuestro proyecto solo haciendo en pie mistol pico-colos es una biblioteca muy sencilla Pero qué pasa que si instalamos otra biblioteca aunque no la vaya a usar imanes
Voy a instalar lodas vale install lodas lodas vale pues aquí podemos ver ya que tenemos muchos más ficheros fíjate aquí me ha puesto lodas y mucho más ficheros no un montón de cosas vamos a instalar react por ejemplo y aquí es donde sí que te va a volar la cabeza porque va a pasar algo que no te esperas qué ha pasado en mi nuevo modules Pues que ahora no solo tengo Ría pico-colos y lodas es que me ha salido que me ha salido otras cosas Me ha salido aquí Yes tokens lusen befiem qué es esto
qué es esto Bueno lo que pasa es que tenemos que tener en cuenta que cada dependencia que instalemos puede tener a su vez sus propias dependencias Por ejemplo reac si vamos a supaca Jason podemos ver que tiene dependencias aquí lo tienes entre las dependencias tiene luz por lo que pasa es que cuando nosotros instalamos react ría que a su vez dice vale tú me instalas a mí y yo voy a instalar mi dependencias porque las necesito para funcionar y aquí es donde entra un una cosa en cascada no y muchas veces el problema es que
hay dependencia que necesita Independencia que necesita Independencia no y ahí es donde está por eso podemos ver que no un modules el chiste este no el meme de modo no modules es real donde dicen que los objetos más pesados del universo hasta el sol neutrones un agujero negro y finalmente tenemos Nou modules no porque muchas veces el problema que tú instalas react pero eso te trae un montón de cosas que ni siquiera controlas muy bien obviamente no necesito ni reacts una cosa que puedes hacer es en pie un install vale Y esto lo que hace
es eliminar los paquetes y además te también actualiza el packason y te quita la dependencia y lo mismo vamos a hacer con lodas que tampoco lo necesitamos vale tenemos pico-colos ya hemos visto De dónde sale ves que lo tenemos en el nuevo modules Nos vamos aquí al ls Advance tenemos pico-colos vamos a utilizar pico-colos cosas sencilla no hace falta que le llamemos pico color de hecho podemos hacer punto PC le podemos poner el nombre que queramos en este caso porque no tiene que ser nombrado pero lo interesante por ejemplo aquí Cuando hacemos el console error
Oye pues el error molaría que fuese de color rojo pues le podemos poner el color rojo al error Así que ahora cuando hagamos lo mismo y nos inventemos aquí la carpeta ves ahora tenemos aquí un error rojo que llama la atención que realmente dices ostras Sí que ha pasado algo no y ya Bueno le pones aquí un emoji y ya lo curón porque también los emojis los detecta funcionan perfectamente pero también lo podemos hacer por ejemplo para nuestro cuando estábamos mostrando todo esto no por ejemplo para el nombre este del pad en pad en PC
Blue lo vamos a hacer esto esto por aquí el fire size también lo podríamos hacer Aquí vamos a ponerle no sé si un Green Incluso le podríamos cambiar el color dependiendo del tamaño que tuviera sería bastante interesante y el modify pues lo vamos a poner de color amarillo vale al menos para darle un poquito de vida esto y ahora ya mjs vale Y fijaos ahora cómo ha quedado esto mucho más bonito de ver no en un momento lo que hemos hecho ahora es que bueno Esto tenemos que Ángel packstar igual lo tenemos que mover de
sitio porque el Green lo he puesto aquí no sé si tenemos que poner esto aquí a ver momento para que me respete el packstar vale Bueno pues fíjate ahora que qué bonito Qué bonito ha quedado No ahora se ve mucho mejor pues cada uno de Los ficheros en directorio de hecho este también lo podemos poner White White no sé qué bueno le podéis poner lo que queráis aquí os podéis poner a jugar a ver no Black Blue magenta Bueno magenta vamos a poner magenta Bueno pero podríais hacer Mira que los archivos que son ocultos se
vean de una forma sabes lo podríais ir cambiando le podríais dar un montón de control no a como se ve y todo esto lo interesante de nada en dos líneas de código pues lo hemos hecho en un momento ahora hemos instalado una dependencia de producción y esto es clave cuando trabajamos con dependencias en Note tenemos que diferenciar dos tipos de dependencias las dependencias que son de producción que quieren decir que nuestra aplicación lo necesita para funcionar por ejemplo pico colors lo tenemos aquí en nuestro fichero y necesita esta dependencia para funcionar Pero hay otro tipo
de dependencia que es igual de importante que la podemos instalar pero que no son de producción y se le llaman dependencias de desarrollo Cómo se instala una dependencia de desarrollo Pues mira vamos a configurar el inter para dejar de tener problemas de separaciones y tal y si no utiliza una constante y que me avise tenemos que limpiar nuestro código que es un proceso automatizado que ocurre automáticamente y que nos va a indicar los errores que tenemos incluso nos va a formatear el código para simplificarnos un montón del desarrollo pues vamos a instalar mpm estándar estándar
para que no sepa es un estilo de código para javascript que es sin punto y coma O sea que si no te gusta pues puedes utilizar semi estándar que sí que tiene punto y coma y lo que tiene es que te va a lintar el código te va a buscar errores te va a decir Oye aquí hay separaciones que no deberían estar un montón de cosas no vamos a utilizar estándar tú utilizar el que tú quieras pero fíjate que tenemos que lo correcto sería instalarla como una dependencia de desarrollo le he puesto una menos de
O puedes hacer guión guión development también puedes hacer guión guión development lo que tú quieras lo que tenemos que indicar que es una dependencia de desarrollo estándar menos de mayúscula y esto lo que va a hacer cuando lo instalemos es que va a hacer algo Bastante especialito cuando miremos el packa Jason Fíjate que estándar es bastante más tocha cuando miremos el pack a Jason nos habrá separado por un lado las dependencias de producción normales con las de desarrollo y claro la pregunta del millón que muchas veces la gente se hace es Oye y por qué
tendría sentido separar las que son de desarrollo con las que son de producción que más da si la voy a tener que instalar Igualmente sí no sí no la base tiene que instalar Igualmente especialmente en tu computadora pero fíjate que lo que habrás visto Es que la instalación de estándar ha tardado 7 segundos las dependencias cuestan tiempo y muchas veces cuando tú quieres desplegar un servicio tú instalar estándar no te aporta nada al servicio no le aporta nada no lo necesita para funcionar y tú no pintar el código cuando se está utilizando en el servidor
por lo tanto no tiene sentido instalarlo Y ese es el caso siempre evita instalar lo que no tiene sentido instalar que tú lo tienes que instalar en local bueno no pasa nada hacemos una imprime Store y se instala todo pero en este caso que cuando esté en producción no será necesario y por eso está bien separarlo como una dependencia de desarrollo y aquí ahora lo que hacemos con estándar ya que lo tenemos aquí instalado pues simplemente configuramos eslint config extendemos estándar guardamos esto y ahora con esta magia deberíamos ver que fíjate ves que ahora me
da errores me dice aquí se necesita una nueva línea vale voy a ir entrando Los ficheros y me va a estar dando pues errores aquí pues está como no se la esperaba me lo va a estar arreglando para que te los arregla automáticamente importante tienes que tener por un lado el inter lo tienes que tener configurado aquí necesitas tener slint como extensión de visual Studio code y además además de esto también vas a necesitar en el Jason tener el formaton save vale fíjate necesitas esto No tendríamos aquí el default matter aquí Pretty Aunque aquí en
este caso no utilizamos y editor formaton save a true para asegurarte que realmente estás Estás limitando correctamente y luego también esto editor code action safe source.fixol Slim true y esto lo que va a hacer es que automáticamente cuando tú guardes el fichero va a arreglar todos los errores del inter que tengas todos los que pueda hacer automáticamente Por ejemplo si yo aquí le pongo tabuladores que no debería ves aquí se me queja guardo el fichero se arregla que pongo un punto y coma más de un punto y coma guardo el fichero los borra esto es
clave vale es clave para programar más rápido para no perder tiempo que siga el mismo estilo para tener siempre el código limitado de la misma forma Así que si tenéis que hacer pruebas técnicas este proyecto que estamos haciendo No que justamente ya hay 100 107 proyectos my cago en la leche 107 personas Mira este hace 9 minutos pues es súper importante que os aseguréis de limpiar el código para que vuestro código tenga todo el sentido del mundo y que no os olvidéis de errores y tal vale Así que nada si queréis hacer la prueba técnica
aparte estas son más de frontend Pero bueno estamos empezando ahora Así que darle cañita para terminar por todo lo alto nuestra clase o sea la última La Última sección del curso que vamos a hacer vamos a empezar el servidor vale http porque entre todos los módulos todos los módulos nativos que tenemos en Note uno de los más importantes es el del servidor se puede hacer con dependencia se puede hacer un montón de formas Pero esto es un curso de Núñez desde cero donde te quiero enseñar te quiero enseñar no 10 por lo tanto para llegar
a hacer nuestro servidor y nuestras apis vamos a llegar a través de hacer primero un servidor web desde cero vamos a ver cómo se hace Qué ventajas tiene Qué necesitamos Cómo tenemos que pensar y tal Y luego pasaremos a la dependencias ya pensaremos en cómo lo hacemos con Express con lo que sea pero no vamos directamente a Express Por qué Porque se puede hacer con node y vas a entender cómo funciona nude ya iremos a Express y la siguiente semana y la semana que viene en la próxima clase justamente que la vamos a poner ya
aquí haremos la Api Api con Express desde cero en el 27 Entonces qué es lo que vamos a hacer primero para poder llegar a hacerlo de Express vamos a ver cómo lo podemos hacer rápidamente nosotros desde cero vale no se puede empezar directamente con una dependencia y ya está y vas a ver que es que es muy fácil vamos a tener la dependencia http para eso esto es un módulo nativo que nos permite http pues hacer procesos y conexiones con el protocolo http Como por ejemplo crear un servidor Http y poder recibir reques peticiones Cómo
creamos esto vamos a crear un servidor con http punto create server y cuando tenemos un servidor qué es lo que puede hacer un servidor un servidor puede hacer simplemente dos cosas o recibir una petición o devolver una respuesta Así que aquí vamos a tener un callback que es el que va a gestionar tanto la request como las respuestas no y vamos a tener los dos parámetros la request y la respuesta Así que cada vez que llegue una request le vamos a poder responder con algo fíjate esto sería lo primero que podemos hacer no cada vez
que se ejecuta este callback es que ha recibido una request y podemos responder utilizando el res que sería el response y aquí tenemos diferentes métodos para hacerlo aquí podemos decir Vale cuando recibo una petición voy a devolver y responder y terminar la comunicación con el mensaje Hola mundo Esta es la parte del servidor pero nos queda otra parte y es Escuchar Dónde tiene que escuchar el servidor Así que decimos server punto Listen y aquí le decimos el puerto le voy a decir Puerto 3000 por ejemplo no y aquí podemos tener otro callback que se ejecutará
cuando el servidor empieza a escuchar Así que aquí tendríamos Oye cuando el servidor a escuchar pues vamos a poner aquí que un consort el servidor está escuchando en el puerto 3000 Bueno pues fíjate aquí que nos vamos a nuestro proyecto y hacemos Note 9.htp punto js ejecutamos Esto vale No pasa nada porque ya me lo olía me dice oye que estás intentando levantar una aplicación en un puerto que ya está en uso este error seguro que alguna vez lo has visto lo has tenido que ver alguna vez a ver te voy a decir dos cosas
un truco máximo muy chulo y además te voy a explicar una cosa El problema es que muchas veces por defecto por ejemplo aquí la deeply No sí la deeply creo que es no que tengo en el puerto 3000 ves aquí tengo algo el next strapping lo tengo en el puerto 3000 o alguno tendré el puerto 3000 por lo tanto ese puerto ya está en uso y Fíjate que me da un error bueno Pues resulta que podríamos utilizar otro y ya está No aquí en lugar de esto puede decir un dos tres cuatro 1 2 3
4 1 2 3 4 y ya está no venga arreglado muy bien mido arreglado y ahora podríamos ir al localhost un dos tres cuatro Y fíjate que tenemos ahí el Hola mundo no cuando ha recibido la petición ha recibido la petición y le hemos respondido con un hola mundo Fíjate que aquí hay un consort este consoló que pone aquí request receive Este consoló lo vemos aquí vale pero no lo vamos a ver aquí por qué Porque este conson lock esto es el navegador en el navegador no llegan los conson lock que se Ejecutan en el
servidor súper importante esto lo iremos viendo pero para que vayas escuchando y dando dándote cuenta podríamos hacer esto con el puerto Pero hay un truco que está bastante chulo para que siempre te utilice un puerto vacío en lugar de utilizar pues hacer cosas raras una cosa que podéis hacer es utilizar el puerto 0 el puerto 0 lo que hace es que automáticamente va a buscar el primer Puerto que encuentre que esté disponible así lo que puedes hacer aquí claro aquí ahora dirás Bueno y este Cuál es el puerto entonces fíjate haces esto y ahora me
dice vale pero no ves el puerto o sea cómo voy a saber cuál es el puerto sé que me ha abierto el puerto pero no sé cuál Pero no te preocupes porque por fortuna el server este server lo podemos utilizar para recuperar el puerto Así que vamos a hacer server punto address Port y esto nos va a archivar cuál es el puerto disponible Así que aquí tenemos que en el puerto 63.246 para que esto lo podamos además aprovechar y directamente hacer esto podemos poner esto y así lo haremos clic a vaya vaya vamos a poner
http Así será aplicable ves y podremos ir directamente Y fíjate ahora cada vez que lo ejecute me va a dar un puerto que está libre directamente Cuántas veces seguramente has estado haciendo cosas raras como matar puertos como hacer cosas raras seguro que has hecho un montón de cosas raras con esto de ponerlos a mano de poner con la variable entorno que no está mal tiene sentido Pero cuando estamos en modo desarrollo muchas veces podéis hacer este tipo de cosas esto es recomendable para producción no Esto no es recomendable para producción Por qué Porque en producción
siempre tiene que ser un puerto que Vais a querer que esté abierto y seguramente Vais a querer redireccionarlo al puerto 80 donde Vais a querer tener siempre ahí ese puerto disponible tiene sentido que para producción no pero desarrollo tiene todo el sentido del mundo de hecho lo que podéis hacer y aquí es donde os vamos a hacer el segundo la segunda aplicación práctica vale que está bastante bonita qué os parece si hacemos una aplicación con node que nos diga el puerto un puerto disponible Y esto es una aplicación que Vais a poder utilizar en cualquier
sitio del universo que de hecho la podríais publicar si queréis como como un paquete de mpm Y si os hace ilusión lo podéis hacer y os recomiendo un montón además que le añadeis y hagáis lo que queráis vamos a hacer y vamos a crear una pequeña aplicación que nos va a dar un puerto disponible Nosotros le vamos a decir un puerto vale vamos a decir Puerto 3000 y aquí tenemos diferentes estrategias por ejemplo nos podría le podríamos decir Oye Dame te voy a decir el puerto 3000 pero si el 3000 está ocupado Dame cualquier Puerto
que ya me sirva y punto No entonces Cómo podemos hacer esto igual que tenemos http que es para el protocolo http hay diferentes protocolos no solo existe http hay uno que pensamos que es más liviano que nos va a permitir hacer conexiones más rápidas Así que podríamos utilizar net que es una un módulo con el que vamos a hacer conexiones con el protocolo tcp es más rápido porque no tiene que enviar tantas cabeceras y tal Y nos va a permitir también preguntar si ese servidor está abierto no está abierto levantarlo y ya está así que
vamos a crear una función que vamos a decir find avaleibol Port vamos a decirle que este le vamos a pasar el desited Port el puerto que nosotros deseamos Vamos a intentarlo no vamos a envolver con una promesa lo que vamos a hacer vale vamos a devolver una promesa vale Resort vamos a devolver una promesa y aquí deberíamos resolverlo con el puerto que realmente vamos a vamos a querer tener podríamos exportar esto module.export find avaleibol aquí es donde tiene que ocurrir nuestra magia pero fíjate que es que ya hemos hecho nuestra magia si es que la
tienes aquí en este server Listen este server Listen nos lo está diciendo todo por qué Porque este server server Listen esto que hemos hecho antes ya nos ha servido para comprobar si un puerto existe o no existe podemos hacer algo similar pero sin necesidad ni siquiera de preocuparnos de la reques podríamos crear Aquí bueno lo vamos a hacer dentro vale podríamos crear un servidor vale Aquí hacemos un net punto create server ya tendríamos el servidor y ahora le vamos a decir Oye el servidor Quiero quiero que escuche en el desireport vale el designerport si se
ha podido escuchar No pasa nada va a entrar aquí y por lo tanto aquí ya vamos a tener como el puerto tal y como lo hemos hecho aquí aquí hemos recuperado el puerto Pues nada server.adres Port vale aquí tenemos el puerto de hecho esto lo podemos hacer así más fácil con una estructuración aquí tendríamos el puerto y ya ya podemos cerrar el servidor y resolver con el puerto pim Pam en un momento esto Nos está dando esto en el caso bueno de que haya podido levantar escuchar en el puerto deseado No pues ya lo tendríamos
de saber porfa ya tenemos el puerto y lo devuelvo pero claro Qué pasa si el servidor nos da un error como ya sabéis no lo he comentado antes está gestionado con eventos o sea cuando recibimos errores muchas veces Vais a ver que tenéis formas de escuchar los eventos de error esto con los servidores esto cuando enviéis peticiones streams de datos un montón cuando leáis un fichero Vais a poder siempre escuchar los eventos y aquí podemos escuchar un evento que sea server on error vale porque no Yes está muy manejado a eventos justamente por eso podemos
escuchar el evento error del servidor y cuando exista este error vamos a ver que si el código de error es el que hemos visto antes que era y address a ver si lo veo Ah mira este me lo está diciendo lo he limpiado Bueno creo que es este y address injustes si el código de error es que está ocupado el servidor que está el puerto que estábamos Deseando lo que vamos a hacer simplemente podríamos hacer esto no podríamos hacer faena valeble Port pero pasándole el cero le pasamos el 0 y cuando esto termine lo resolvemos
y el que nos dé O sea si aquí nos habrá dado un puerto y ahí resolvemos la promesa con este Puerto y ya está y aquí si el error es diferente lo que podríamos hacer un relect con el error que sea si por lo que sea habido un error diferente que no es porque el puerto esté ocupado sino que simplemente el puerto yo que sé Ha reventado nuestro ordenador pues ya estaría y con esto si no me he equivocado hemos creado una función habéis visto alguna vez una función así O sea alguna vez en un
curso de hoy os han enseñado a hacer esto no lo sé pero a mí me parece tan tan importante porque lo que hemos hecho aquí es claro una cosa que podéis hacer sería sumar otra cosa que podéis hacer aquí que Sería más hacerlo como que cada vez se vaya sumando constantemente no O sea si esto Eso lo dice Sergio serrano y tienes razón no podríais hacer aquí el starting Port +1 no y así desireport más uno o sea podrías estar haciendo más uno constantemente no más uno más uno hasta que entonces empezáis con el 3000
si queréis lo hacemos así está chulo lo del cero Porque estos garantiza pero lo que pasa lo malo de hacer esto es que si el 3000 el 30001 está ocupado el 30002 el 303 No pues ahí empieza Imagínate que pones el puerto como el puerto 100 Pues el puerto 100 del 100 al 180 mejor están ocupados entonces están ahí constantemente y haciendo cosas no Pero bueno no está mal si queréis esto podéis hacerlo así o podéis hacer esto lo que prefiráis vale yo lo voy a dejar con el cero porque me parece Interesante pero podéis
hacerlo lo que queráis entonces con esto nos debería dar uno rápidamente Así que ahora lo chulo Es que podríamos ir aquí y utilizar nuestro módulo que hemos hecho en un momentito final por lo que podemos decir es Oye yo quiero el 3000 Pero mira si el que me des si me das otro pues escuchamos este y aquí ya pues el que estemos escuchando ya no hace falta esto porque tenemos que estar escuchando exactamente el mismo Pues lo hacemos así y ya está esto lo podríamos hacer con la simcaway y quedaría mucho mejor y mucho más
bonito pero al menos con esto Ahora si no me he equivocado en nada que me he equivocado a ver que he hecho aquí Ah el fine porte este Ah es que ves se ha inventado el nombre se ha inventado es que me he fiado aquí de pilota saco vale vale fíjate aquí me ha dicho he intentado el 3000 pero el 3000 está ocupado me ha devuelto uno y ya está ya lo tengo que le pongo aquí un dos tres cuatro Bueno pues intentamos aquí y el 1 2 3 4 sí que está disponible pues ya
lo tenemos esto por si alguna vez os habéis preguntado cómo funciona por debajo next y un montón de obit no de cómo para encontrar fácilmente y mira sin dependencias lo puedes hacer tú mismo con el poder de no Yes porque esta es la magia de no y es va mucho más allá del backen Por eso te digo que no hay empresa no hay nadie no hay nadie no hay ningún programador que aunque sea sin querer no estoy utilizando No porque no está en casi todos los sitios lo tenéis en baken pero es que también lo
tenéis en línea de comandos y utilizáis el inter eso es Note si estáis utilizando visual Studio code está utilizando node están todos los sitios Entonces cómo le decimos a no que el post 0 solo para el development es que lo que tenéis que hacer en ese caso y aquí lo vamos a hacer ya os he comentado antes que podéis utilizar variables de entorno lo ideal es que aquí tengáis process.e.porno o sea vamos a poner aquí el desigg Desire Port o process este Port aquí podemos tener un valor por defecto que podemos poner que sea 3000
pero esto tú ya vas a saber en producción que esto sin ningún tipo de problema va a funcionar Sí o sí Entonces tú Aquí puedes poner Desire Port este design lo ponemos aquí y lo bueno de esto es que tú Aquí tienes un valor por defecto pero ya aquí puedes hacer esto puedes decir Port 1 2 3 4 y a través de una variable de entorno que sería esto que lo tenemos que poner justo antes de llamar a Note y el archivo que queremos ejecutar Pues con esto Ahora ya tendríamos un dos tres cuatro aquí
esto era un dos tres cuatro hemos utilizado el objeto global prosses para leer la variable entorno comport con el mismo nombre Tenemos aquí y este desierport lo estamos utilizando aquí y ya Lo tendríamos totalmente tiene que haber un archivo punto No tiene que haber un archivo punto y ese ese comentario shuriken es de no entender de aprender las casas por el tejado el archivo no es algo de Note es de una dependencia de node entonces no es obligatorio utilizar variables de entorno con un archivo en eso es algo que si tienes una biblioteca te lo
hace y hay algunos frameworks y tal que te ayuda con eso y te lo pone automáticamente pero hay que entender lo que es parte de un framework de una biblioteca y Qué es parte de entonces lo que es parte de node justamente es leer una variable de entorno el archivo punto emf es otra cosa de una biblioteca y puede haber diferentes formas dote no es la única forma de hacerlo hay muchas alternativas que son igual de válidas y que incluso pueden tener muchas ventajas respecto porque puede ser que vengan anticipadas porque puede ser Hay un
montón de alternativas entonces tenerlo en cuenta porque a veces damos por sentado que cosas que no son de no 10 o que no son del lenguaje o no lo damos por sentado Pero porque no hemos entendido Qué es Note y Qué es todo lo demás Así que importante para diferenciarlo vale pero sí leer variables de entorno sí que es un tema totalmente nativo que podemos tener acceso de hecho a todas las variables de entorno del sistema esto es uno de los problemas que muchas veces tiene por desgracia note que si tú haces un consuelo del
proceso lo malo es que tienes aquí acceso Pues a todas las variables de entorno y Bueno hay un montón aquí de tokens que ya están todos aspirados no os preocupéis todo lo tienes aquí Así que esto es una de las cosas malas que tienen que tiene Note tiene acceso a toda la todas las variables de entorno es una cosa que están solucionando que están experimental el hecho de cerrar un poquito no el hecho A qué tiene acceso del sistema de archivos por ejemplo una cosita que está mal en Note tú podrías crear ahora mismo este
Script que hemos hecho aquí este Script y borrar directamente todos los todos los ficheros fs hacemos fs RM y te elimine un fichero sabes es una pena este tipo de cosas pues es un rollo pero bueno se está trabajando en esto para tener un sistema de permisos en no ves están experimental seguro que la próxima vez que hagamos este curso o un curso similar lo vais lo Vais a tener disponible Vais a poder utilizarlo utilizando un polis y punto Jason que va a estar separado o podréis utilizar incluso decir a qué tiene recursos ves aquí
tiene acceso el recurso al fire System al ose sola una versión que no es completa al http solo los puede importar que va a ser súper interesante la verdad es una cosa que necesita Note Pero por desgracia todavía no está estable y por lo tanto no lo vamos a ver en este curso pero sí que quiero que sepas que por defecto Note tiene acceso a todo a todo y especialmente ten mucho mucho cuidado al ejecutar cualquier archivo de nouji es utilizando El Comando el prefijo sudo porque eso es lo que te da es poderes de
administrador y ahí puedes hacer un berenjenal Así que ten mucho cuidado
Copyright © 2025. Made with ♥ in London by YTScribe.com