Logotipo de Zephyrnet

¿Qué es el nodo y cuándo debo usarlo?

Fecha:

Entonces has oído hablar de Node.js, pero no estás muy seguro de qué es o dónde encaja en tu flujo de trabajo de desarrollo. O tal vez has escuchado a personas cantando las alabanzas de Node y ahora te preguntas si es algo que necesitas aprender. Quizás esté familiarizado con otra tecnología de back-end y quiera descubrir qué hay de diferente en Node.

Si eso suena como tú, entonces sigue leyendo. En este artículo, echaré un vistazo de alto nivel para principiantes a Node.js y sus principales paradigmas. Examinaré los principales casos de uso de Node, así como el estado actual del paisaje de Node, y le ofreceré una amplia gama de puntos de partida (para leer más) en el camino.

Tenga en cuenta que, a lo largo del artículo, usaré "Node" y "Node.js" indistintamente.

¿Qué es Node.js?

Hay muchas definiciones que se pueden encontrar en línea. Echemos un vistazo a algunos de los más populares. Esto es qué dice la página de inicio del proyecto:

Node.js® es un tiempo de ejecución de JavaScript integrado en el motor V8 JavaScript de Chrome.

Y esto es Lo que Stack Overflow tiene para ofrecer:

Node.js es un tiempo de ejecución de E / S asíncrono, sin bloqueo y basado en eventos que utiliza el motor JavaScript V8 de Google y la biblioteca libuv.

Hmmm, "basado en eventos", "sin bloqueo", "E / S asíncrona", eso es mucho para digerir de una vez. Entonces, abordemos esto desde un ángulo diferente y comencemos centrándonos en el otro detalle que mencionan ambas descripciones: el motor V8 JavaScript.

El nodo se basa en el motor JavaScript V8 de Google Chrome

El motor V8 es el motor JavaScript de código abierto que se ejecuta en Google Chrome y otros navegadores web basados ​​en Chromium, incluidos Brave, Opera y Vivaldi. Fue diseñado teniendo en cuenta el rendimiento y es responsable de compilar JavaScript directamente en el código de máquina nativo que su computadora puede ejecutar.

Sin embargo, cuando decimos que Node está construido en el motor V8, no queremos decir que los programas Node se ejecuten en un navegador. No lo son Más bien, el creador de Node (ryan dahl) tomó el motor V8 y lo mejoró con varias características, como una API del sistema de archivos, una biblioteca HTTP y varios métodos de utilidad relacionados con el sistema operativo.

Esto significa que Node.js es un programa que podemos usar para ejecutar JavaScript en nuestras computadoras. En otras palabras, es un tiempo de ejecución de JavaScript.

¿Cómo instalo Node.js?

En la siguiente sección, instalaremos Node y escribiremos un par de programas simples. También veremos npm, un administrador de paquetes que viene incluido con Node.

Binarios de nodo vs Administrador de versiones

Muchos sitios web te recomendarán que te dirijas a la página oficial de descarga de Node y tome los binarios del nodo para su sistema. Si bien eso funciona, sugeriría que utilice un administrador de versiones en su lugar. Este es un programa que le permite instalar múltiples versiones de Node y cambiar entre ellas a voluntad. Existen varias ventajas al usar un administrador de versiones. Por ejemplo, niega posibles problemas de permisos al usar Node con npm y le permite configurar una versión de Node por proyecto.

Si desea seguir la ruta del administrador de versiones, consulte nuestro consejo rápido: Instale múltiples versiones de Node.js usando nvm. De lo contrario, tome los binarios correctos para su sistema desde el enlace de arriba e instálelos.

"¡Hola Mundo!" el camino Node.js

Puede verificar que Node esté instalado en su sistema abriendo un terminal y escribiendo node -v. Si todo ha ido bien, deberías ver algo como v12.14.1 desplegado. Esta es la corriente LTS versión al momento de escribir.

Luego, crea un nuevo archivo hello.js y copie en el siguiente código:

console.log("Hello, World!");

Esto usa el nodo módulo de consola incorporado para mostrar un mensaje en una ventana de terminal. Para ejecutar el ejemplo, ingrese el siguiente comando:

node hello.js

Si Node.js está configurado correctamente, "¡Hola, mundo!" será mostrado.

Node.js tiene un excelente soporte para JavaScript moderno

Como se puede ver en esto tabla de compatibilidad, Node tiene un excelente soporte para ECMAScript 2015 (ES6) y más allá. Como solo se dirige a un tiempo de ejecución (una versión específica del motor V8), esto significa que puede escribir su JavaScript utilizando la sintaxis más reciente y más moderna. También significa que generalmente no tiene que preocuparse por problemas de compatibilidad, como lo haría si estuviera escribiendo JavaScript que se ejecutaría en diferentes navegadores.

Para ilustrar el punto, aquí hay un segundo programa que utiliza varias funciones modernas de JavaScript, como las etiquetadas literales de plantilla, desestructuración de objetos y Array.prototype.flatMap ():

function upcase(strings, ...values) { return values.map(name => name[0].toUpperCase() + name.slice(1)) .join(' ') + strings[2];
} const person = { first: 'brendan', last: 'eich', age: 56, position: 'CEO of Brave Software',
}; const { first, last } = person;
const emoticon = [ ['┌', '('], ['˘', '⌣'], ['˘', ')', 'ʃ'] ]; console.log( upcase`${first} ${last} is the creator of JavaScript! ` + emoticon.flat().join('')
);

Guarde este código en un archivo llamado index.js y ejecutarlo desde tu terminal usando el comando node index.js. Deberías ver Brendan Eich is the creator of JavaScript! ┌(˘⌣˘)ʃ salida a la terminal.

Presentamos npm, el Administrador de paquetes de JavaScript

Como mencioné anteriormente, Node viene incluido con un administrador de paquetes llamado npm. Para verificar qué versión ha instalado en su sistema, escriba npm -v.

Además de ser las administrador de paquetes para JavaScript, npm es también el registro de software más grande del mundo. Hay más de 1,000,000 de paquetes de código JavaScript disponibles para descargar, con miles de millones de descargas por semana. Echemos un vistazo rápido a cómo usaríamos npm para instalar un paquete.

Instalar un paquete globalmente

Abra su terminal y escriba lo siguiente:

npm install -g jshint

Esto instalará el paquete jshint globalmente en su sistema. Podemos usarlo para unir las index.js archivo del ejemplo anterior:

jshint index.js

Ahora debería ver una serie de errores relacionados con ES6. Si quieres arreglarlos, agrega /* jshint esversion: 6 */ a la cima de index.js archivo, vuelva a ejecutar el comando y el linting debería pasar.

Si desea un repaso sobre linting, vea Una comparación de las herramientas de linting de JavaScript.

Instalar un paquete localmente

También podemos instalar paquetes localmente en un proyecto, en lugar de globalmente, en nuestro sistema. Crear un test carpeta y abra una terminal en ese directorio. Luego escriba esto:

npm init -y

Esto creará y rellenará automáticamente un package.json archivo en la misma carpeta. Luego, use npm para instalar el paquete lodash y guárdelo como una dependencia del proyecto:

npm install lodash --save

Crea un archivo llamado test.js y agregue lo siguiente:

const _ = require('lodash'); const arr = [0, 1, false, 2, '', 3];
console.log(_.compact(arr));

Finalmente, ejecute el script usando node test.js. Deberías ver [ 1, 2, 3 ] salida a la terminal.

Trabajar con el package.json Archive

Si nos fijamos en el contenido de la test directorio, notará una carpeta titulada node_modules. Aquí es donde npm ha guardado lodash y las bibliotecas de las que depende lodash. los node_modules la carpeta no debe registrarse en el control de versiones y, de hecho, puede volver a crearse en cualquier momento ejecutando npm install desde la raíz del proyecto.

Si se abre la package.json verá lodash en la lista dependencies campo. Al especificar las dependencias de su proyecto de esta manera, permite que cualquier desarrollador en cualquier lugar clone su proyecto y use npm para instalar cualquier paquete que necesite ejecutar.

Si desea obtener más información sobre npm, asegúrese de leer nuestro artículo Una guía para principiantes sobre npm: el Administrador de paquetes de nodos.

¿Para qué se utiliza Node.js?

Ahora que sabemos qué son Node y npm y cómo instalarlos, podemos centrar nuestra atención en el primero de sus usos comunes: instalar (a través de npm) y ejecutar (a través de Node) varias herramientas de compilación, diseñadas para automatizar el proceso de desarrollo Una aplicación moderna de JavaScript.

Estas herramientas de compilación vienen en todas las formas y tamaños, y no llegará lejos en un paisaje JavaScript moderno sin toparse con ellas. Se pueden usar para cualquier cosa, desde agrupar sus archivos JavaScript y sus dependencias en activos estáticos, hasta ejecutar pruebas o alinear automáticamente el código y comprobar el estilo.

Tenemos una amplia gama de artículos sobre herramientas de compilación en SitePoint. Aquí hay una pequeña selección de mis favoritos:

Y si desea comenzar a desarrollar aplicaciones con cualquier marco de JavaScript moderno (por ejemplo, React o Angular), se espera que tenga un conocimiento práctico de Node y npm (o tal vez Hilo) Esto no se debe a que necesite un back-end de Nodo para ejecutar estos marcos. Usted no Más bien, es porque estos marcos (y muchos, muchos paquetes relacionados) están disponibles a través de npm y dependen de Node para crear un entorno de desarrollo sensible en el que puedan ejecutarse.

Si está interesado en averiguar qué papel juega Node en una aplicación JavaScript moderna, lea La anatomía de una aplicación moderna de JavaScript.

Node.js nos permite ejecutar JavaScript en el servidor

A continuación, llegamos a uno de los casos de uso más importantes para Node.js: ejecutar JavaScript en el servidor. Este no es un concepto nuevo, y Netscape lo intentó por primera vez en 1994. Node.js, sin embargo, es la primera implementación en ganar tracción real, y proporciona algunos beneficios únicos, en comparación con los lenguajes tradicionales. Nodo ahora juega un papel crítico en la pila de tecnología de muchas empresas de alto perfil. Echemos un vistazo a cuáles son esos beneficios.

El modelo de ejecución de Node.js

En términos muy simplistas, cuando se conecta a un servidor tradicional, como Apache, generará un nuevo hilo para manejar la solicitud. En un lenguaje como PHP o Ruby, cualquier operación de E / S posterior (por ejemplo, interactuar con una base de datos) bloquea la ejecución de su código hasta que la operación se haya completado. Es decir, el servidor tiene que esperar a que finalice la búsqueda de la base de datos antes de poder procesar el resultado. Si llegan nuevas solicitudes mientras esto sucede, el servidor generará nuevos hilos para tratar con ellos. Esto es potencialmente ineficiente, ya que una gran cantidad de subprocesos puede hacer que un sistema se vuelva lento y, en el peor de los casos, que el sitio se caiga. La forma más común de admitir más conexiones es agregar más servidores.

Node.js, sin embargo, es de un solo subproceso. Es también evento conducido, lo que significa que todo lo que sucede en Node es una reacción a un evento. Por ejemplo, cuando llega una nueva solicitud (un tipo de evento), el servidor comenzará a procesarla. Si luego encuentra una operación de bloqueo de E / S, en lugar de esperar a que esto se complete, registrará una devolución de llamada antes de continuar procesando el próximo evento. Cuando finaliza la operación de E / S (otro tipo de evento), el servidor ejecutará la devolución de llamada y continuará trabajando en la solicitud original. Debajo del capó, Node usa el libuv biblioteca para implementar este comportamiento asincrónico (es decir, sin bloqueo).

El modelo de ejecución de Node hace que el servidor tenga muy poca sobrecarga y, en consecuencia, es capaz de manejar una gran cantidad de conexiones simultáneas. El enfoque tradicional para escalar una aplicación Node es clonarla y hacer que las instancias clonadas compartan la carga de trabajo. Node.js incluso tiene un módulo incorporado para ayudarlo a implementar una estrategia de clonación en un solo servidor.

La siguiente imagen muestra el modelo de ejecución de Node:

Modelo de ejecución del nodo

Fuente: Introducción a Node.js por el Prof. Christian Maderazo, James Santos

O, si prefieres videos, mira esta increíble charla: ¿Qué diablos es el bucle de eventos de todos modos? No es específico del nodo, pero hace un gran trabajo al explicar el concepto.

¿Hay alguna desventaja?

El hecho de que Node se ejecute en un solo hilo impone algunas limitaciones. Por ejemplo, debe evitarse el bloqueo de llamadas de E / S, Las operaciones con uso intensivo de la CPU deben transferirse a un subproceso de trabajo, y los errores siempre se deben manejar correctamente por temor a bloquear todo el proceso.

A algunos desarrolladores tampoco les gusta el estilo de codificación basado en la devolución de llamadas que impone JavaScript (tanto que incluso hay un sitio dedicado a los horrores de escribir JavaScript asincrónico) Pero con la llegada de las promesas nativas, seguidas de cerca por async aguardan, control de flujo en JavaScript moderno se ha vuelto más fácil que nunca.

"¡Hola Mundo!" - Versión del servidor

Echemos un vistazo rápido a un "¡Hola, mundo!" ejemplo de servidor HTTP:

const http = require('http'); http.createServer((request, response) => { response.writeHead(200); response.end('Hello, World!');
}).listen(3000); console.log('Server running on http://localhost:3000');

Para ejecutar esto, copie el código en un archivo llamado hello-world-server.js y ejecutarlo usando node hello-world-server.js. Abre un navegador y navega hasta http://localhost:3000 para ver "¡Hola, mundo!" se muestra en el navegador.

Ahora echemos un vistazo al código.

Comenzamos requiriendo el nativo de Node Módulo HTTP. Luego usamos su crearServidor Método para crear un nuevo objeto de servidor web, al que pasamos una función anónima. Esta función se invocará para cada nueva conexión que se realice con el servidor.

La función anónima se llama con dos argumentos (request y response) Contienen la solicitud del usuario y la respuesta, que usamos para enviar un código de estado HTTP 200, junto con nuestro "¡Hola Mundo!" mensaje.

Finalmente, le decimos al servidor que escuche las solicitudes entrantes en el puerto 3000 y enviamos un mensaje al terminal para informarnos que se está ejecutando.

Obviamente, hay mucho más para crear incluso un servidor simple en Node (por ejemplo, es importante manejar los errores correctamente), por lo que le aconsejaría que revisa la documentación or consulta nuestro tutorial Si desea saber más.

¿A qué tipo de aplicaciones se adapta Node.js?

Node es particularmente adecuado para crear aplicaciones que requieren algún tipo de interacción o colaboración en tiempo real, por ejemplo, sitios de chat o aplicaciones como código compartido, donde puede ver un documento editado en vivo por otra persona. También es una buena opción para crear API en las que maneja muchas solicitudes que están controladas por E / S (como aquellas que necesitan realizar operaciones en una base de datos) o para sitios que involucran transmisión de datos, ya que Node hace posible procesar archivos mientras todavía se están cargando. Si este aspecto en tiempo real de Node es algo en lo que le gustaría investigar más, consulte nuestro tutorial sobre Crear una aplicación de chat en tiempo real.

Sin embargo, al decir esto, no todos van a construir el próximo Trello o el próximo Google Docs, y realmente, no hay razón para que no puedas usar Node para construir una aplicación CRUD simple. Sin embargo, si sigue esta ruta, pronto descubrirá que Node es bastante básico y que la forma en que construye y estructura la aplicación depende de usted. Hay varios marcos que puede usar para reducir la repetitiva, con Express habiéndose establecido como el favorito. Sin embargo, incluso una solución como Express es mínima, lo que significa que si desea hacer algo un poco fuera de lo común, necesitará incorporar módulos adicionales desde npm. Esto está en marcado contraste con los marcos como Rails o Laravel, que vienen con una gran cantidad de funciones listas para usar.

Si desea ver la construcción de una aplicación básica y más tradicional, consulte nuestro tutorial Cómo construir y estructurar una aplicación MVC Node.js.

¿Cuáles son las ventajas de Node.js?

Además de la velocidad y la escalabilidad, una ventaja a menudo promocionada de usar JavaScript en un servidor web, así como en el navegador, es que su cerebro ya no necesita cambiar de modo. Puedes hacer todo en el mismo idioma, lo que, como desarrollador, te hace más productivo (y con suerte, más feliz). Por ejemplo, puede compartir fácilmente el código entre el servidor y el cliente.

Otra de las grandes ventajas de Node es que habla JSON. JSON es probablemente el formato de intercambio de datos más importante en la Web y la lengua franca para interactuar con bases de datos de objetos (como MongoDB). JSON es ideal para el consumo de un programa JavaScript, lo que significa que cuando trabajas con Node, los datos pueden fluir perfectamente entre capas sin la necesidad de formatear. Puede tener una sintaxis del navegador al servidor a la base de datos.

Finalmente, JavaScript es omnipresente: la mayoría de nosotros estamos familiarizados con JavaScript, o lo hemos usado en algún momento. Esto significa que la transición al desarrollo de Nodo es potencialmente más fácil que a otros lenguajes del lado del servidor. Citando a Craig Buckler en su Nodo vs PHP Smackdown, JavaScript puede permanecer el lenguaje más incomprendido del mundo - pero, una vez que los conceptos hacen clic, hace que otros idiomas parezcan engorrosos.

Otros usos del nodo

Y no se detiene en el servidor. ¡Hay muchos otros usos emocionantes y variados de Node.js!

Por ejemplo: se puede usar como lenguaje de script para automatizar tareas repetitivas o propensas a errores en su PC. También se puede usar para escribe tu propia herramienta de línea de comando, como esto Generador de estilo Yeoman para andamiar nuevos proyectos.

Node.js también se puede utilizar para crear aplicaciones de escritorio multiplataforma e incluso para crea tus propios robots. ¿Qué no se podría amar?

Conclusión

JavaScript está en todas partes, y Node es un tema vasto y expansivo. Sin embargo, espero que en este artículo le haya ofrecido una mirada de alto nivel, amigable para los principiantes, sobre Node.js y sus paradigmas principales que prometí al principio. También espero que cuando vuelvas a leer las definiciones que vimos anteriormente, las cosas tendrán mucho más sentido.

Node.js es un tiempo de ejecución de E / S asíncrono, sin bloqueo y basado en eventos que utiliza el motor JavaScript V8 de Google y la biblioteca libuv.

Si tiene alguna pregunta o comentario, no dude en contactarme Twitter.

Fuente: https://www.sitepoint.com/an-introduction-to-node-js/?utm_source=rss

punto_img

Información más reciente

punto_img