Introduccion
Last updated
Was this helpful?
Last updated
Was this helpful?
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
Node.js es un intérprete de JavaScript que se ejecuta en servidor (sin navegador).
Es el motor de JavaScript que utiliza Google Chrome y node
Escrito en C++
Compila a código máquina
¿Qué necesitamos instalar?
Node.js: entorno de ejecución de JavaScript orientado a eventos asíncronos.
npm. Node Package Manager es un gestor de paquetes. Composer se basa en npm. Permite agragar dependencias y distribuir paquetes
nvm. Node Version Manager.
Si instalamos node de forma simple sólo tenemos una versión de node. La última.
Si trabajamos con múltiples proyectos puede ser que necesitemos varias versiones:
Nvm nos permite tener varias instaladas y seleccionar la que necesitemos en cada proyecto.
Objeto global en JavaScript
Almacena todo sobre lo que se tiene acceso
El objeto global en Node, se llama global:
Lo que se está viendo en el navegador
Podemos modificarlo en runtime
process (node) = document (JavaScript)
Vemos la información del proceso node que se está ejecutando:
pid
versión de node
métodos
...
El código en ambos es JavaScript
Ambos se ejecutan con el mismo motor (si usamos Chrome)
Node utiliza el motor fuera del contexto del navegador
No hay un browser sandbox
Tenemos funcionalidad añadida:
Acceso al file system
Acceso a bbdd completa
Incluso montar un servidor web
Se lee el codigo en JavaScript
Se compila a código máquina por el V8 y se ejecuta:
V8 compiles JavaScript directly to native machine code before executing it, instead of more traditional techniques such as interpreting bytecode or compiling the whole program to machine code and executing it from a filesystem. The compiled code is additionally optimized (and re-optimized) dynamically at runtime, based on heuristics of the code's execution profile. (wikipedia)
Mismo lenguaje en cliente y servidor
Permite a cualquier persona desarrollar en backend o en frontend
Permite reusar código o incluso mover código de cliente a servidor o al revés
No bloqueante (asíncrono) por naturaleza
Los métodos síncronos, llevan el sufijo sync
El mayor repositorio de código disponible: npm
composer(php) o jpm(java) están basados en npm
Orientado a eventos
Es monohilo
Utiliza un solo procesador
Si queremos usar toda la potencia de la CPU, tendremos que levantar varias instancias de node y utilizar un repartidor* de carga (P.ej. pm2)
Balancer no es balanceador (false friend)
Llamadas síncronas en servidor serían fatales:
¡Bloqueariamos las conexiones al servidor hasta que acabase la instrucción bloqueante!
Al ser asíncrono podremos tener muchas sesiones concurrentes
El módulo fs pertenence a los core modules de node, no es necesario instalarlo
Para consultar la API:
Desde el terminal (plugin node de zsh)
El código asíncrono tiene un throughput mucho mayor.
Se puede volver complejo el trabajar con el resultado de una función asíncrona.
El código asíncrono no se ejecuta de forma secuencial, más dificil de seguir
El método asíncrono recibe como último parámetro una función de callback
Utilizar código secuencial y asíncrono
Para ello utilizaremos promesas y async/await
Evitaremos la anidación de funciones de callback, conocido como callback hell
Estándarización del JavaScript de NetScape (1997)
Implementaciones de ECMAScript:
JavaScript
JScript (Microsoft)
ActionScript (Adobe)
..
Cómite técnico encargado de la especificación de ECMAScript
Yahoo
Paypal
Microsoft
....
A favor de grandes cambios:
Microsoft (Silverlight con C#)
Adobe (Adobe air con ActionScript)
A favor de mantener compatibilidad con lo anterior:
Yahoo
No tiene tantas grandes novedades
jQuery nace en el 2006 para paliar las diferencias entre navegadores
Grandes novedades
Se pueden usar transpilers
ES6: Jun 2015
El comite decidió publicar especificaciones ECMAScript de forma anual
Se renombro a ES2015
ES2016 (ES7)
ES2017 (ES8) ... ES2019 (ES10)
ES.Next: Término dinámico, se refiere a la próxima versión de ECMAScript.
En Web tenemos que vivir con la fragmentación
V8 - Google Chrome (Chromium, MongoDB)
SpiderMonkey Firefox (GNOME, Adobe).
Chakra - Microsoft IE y Edge
En Node es más sencillo porque:
Solo hay un motor: v8
Nosotros elegimos su versión
¿Empezamos el código?
Los módulos en Node.js pueden considerarse librerías.
Es el elemento que nos permite dividir un proyecto en unidades de código más pequeñas.
Node incorpora un buen número de módulos para ser utilizados en nuestros proyectos:
fs para el sistema de ficheros.
os para el sistema operativo.
http para montar un servidor web. ...
Para incluir módulos debemos usar require(nombremodulo):
Consultar en https://nodejs.org/es/docs/
require es un módulo que está en el objeto global
Este código no es necesario:
Funciona de forma síncrona
Por eso se ponen al comienzo
Podríamos colocarlos más tarde y hacer lazy loading
npm install nos permite incorporar módulos de terceros:
Después son usados con require() igualmente
Crear un fichero javascript con definición de funciones, clases, constantes, ...
Cualquier fichero con definición de funciones, variables, constantes, ...
Uso de exports
Las funciones o variables que puedan usarse desde el exterior se declaran con exports:
Veamos ejemplos:
Ejemplo 1
Crear módulo en mensaje.js
Usar el módulo en app.js
Ejemplo 2
Crear módulo en mensaje.js
Usar el módulo en app.js
Ejemplo 3. Exportar función
Fichero log.js
Objeto exportado:
Uso en app.js
Ejemplo 4. Exportar objeto JSON
Fichero data.js
Uso en app.js
Ejemplo 5. Un módulo como una clase
Módulo Person.js
Ejemplo de uso en app.js
Ejemplo 6. Múltiples exports
O simplemente:
Y lo usaríamos así:
Ejemplo 7. Las funciones pueden estar definidas previamente
Ejemplo 8. Usando funciones flecha
Necesitamos usar el módulo Http:
Ejemplo:
Podemos agruegar cabecerars HTTP
Ejemplo:
Podemos tomar toda la información del request
Por ejemplo la URL:
O los parámetros GET
Vamos a moficiar la configuración de Visual Code
Vamos a instalar eslint como linter
Vamos a modificar algunas configuraciones de preferecias y atajos:
Añadimos el siguiente JSON para la configuración de shortcuts:
Si usamos linux y gnome:
El atajo de multicursor es alt+click
pero esta combinación está usada por gnome
Así lo cambiamos por super+click y podremos usar la citada combinación de teclas:
Vamos a usar esLint como linter para:
Que nos ayude a generar un código homogéneo.
Que nos ayude a detectar errores.
Instalación como dependencia de desarrollo del proyecto:
.eslintrc.json tiene la configuración de nuestro linter
Podríamos modificarla, por ej:
Ayuda: Pulsa CTRL + espacio para autocompletado
Instalamos la extensión Prettier de Esben Petersen
Su funcionamiento se basa en el fichero eslintrc
Queremos las modificaciones de eslint al guardar
Cambiamos las preferencias en Visual Code Editor para formatear nuestro JavaScript:
Observa que prettier tiene unas configuraciones por defecto:
Debemos quedarnos con lo que se define en eslint, que es más parametrizable.
Cuando creemos un nuevo proyecto nos interesa que genere automaticamente datos como nuestro nombre o email
Ver documentación para su configuación o mediante consola:
npm config --help para ver los comandos de configuración
Los cambios se guardan en el fichero $HOME/.npmrc
npm adduser genera un authtoken = login automático al publicar en el registro de npm
Se utiliza Semantic Versioning
Formato versiones: major.minor.patch
major: Cambios en compatibilidad de API
minor: Añade funcionalidad. Mantiene compatibilidad.
patch: Soluciona bug. Mantiene compatibilidad.
¡Puede obligarnos a cambiar el major muy a menudo!