Ir al contenido
Menú principal
Menú principal
mover a la barra lateral
ocultar
Navegación
Página principal
Cambios recientes
Página aleatoria
Ayuda sobre MediaWiki
Buscar
Buscar
español
Apariencia
Crear una cuenta
Acceder
Herramientas personales
No has accedido
Discusión
Contribuciones
Crear una cuenta
Acceder
Edición de «
Node.js
»
Página
Discusión
español
Leer
Editar
Editar código
Ver historial
Herramientas
Herramientas
mover a la barra lateral
ocultar
Acciones
Leer
Editar
Editar código
Ver historial
General
Lo que enlaza aquí
Cambios relacionados
Información de la página
Apariencia
mover a la barra lateral
ocultar
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
{{Ficha de software | nombre = Node.js | logo = [[Archivo:Node.js logo.svg|200px|Logo Node.js]] | autor = Ryan Lienhart Dahl | desarrollador = [http://github.com/ry/node/blob/master/AUTHORS Node.js Developers]<br/>[[Joyent]] |desplegable = |captura = |pie = |modelo_desarrollo = |lanzamiento = {{fecha|27|05|2009}}<ref>{{cita web|autor1=Joyent|título=node|url=https://github.com/joyent/node/tags?after=v0.0.4|obra=Github|fechaacceso=16 de junio de 2015}}</ref> |web_lanzamiento = |última_versión = 25.4.0 |fecha_última_versión = {{fecha de lanzamiento|19|01|2026}}<ref>{{cite web|url=https://github.com/nodejs/node/releases/|fechaacceso=2 de mayo de 2024|título=<title>Releases · nodejs/node|via=[[GitHub]]}}</ref> |web_última_versión = https://nodejs.org/es/download/ |última_versión_prueba =20.7.0 |fecha_última_versión_prueba = {{fecha de lanzamiento|18|09|2023}}<ref>{{cite web|url=https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V20.md#20.7.0|fechaacceso=22 de septiembre de 2023|título= Node.js 20 ChangeLog|via=[[GitHub]]}}</ref> |género = [[Programación dirigida por eventos|Dirigida por eventos]] |sistema operativo=|lenguaje_programación = [[JavaScript]], [[C++]], [[Python]] |sistema_operativo = [[Windows]], [[Mac OS X]], [[Linux]], [[Solaris (sistema operativo)|Solaris]], [[FreeBSD]], [[OpenBSD]], [[webOS]] |plataforma = |licencia = [[Licencia MIT]] |estado = Activo |idiomas = |español =No |sitio_web = [http://nodejs.org/ nodejs.org] |soporte = |versiones = [https://nodejs.org/es/download/releases/ lista versiones] }} '''Node.js''' es un entorno en tiempo de ejecución multiplataforma, de código abierto, para la capa del servidor (pero no limitándose a ello) basado en el lenguaje de programación [[JavaScript]], asíncrono, con [[I/O|E/S]] de datos en una [[Programación dirigida por eventos|arquitectura orientada a eventos]] y basado en el motor [[V8 (motor JavaScript)|V8]] de Google. Fue creado con el enfoque de ser útil en la creación de programas de red altamente escalables, como por ejemplo, [[Servidor web|servidores web]].<ref>{{cita web|apellidos1=Finley|nombre1=Klint|título=Wait, What's Node.js Good for Again?|url=http://readwrite.com/2011/01/25/wait-whats-nodejs-good-for-aga|obra=ReadWriteWeb|idioma=en|fecha=25 de enero de 2011|fechaacceso=16 de junio de 2015|urlarchivo=https://web.archive.org/web/20130621203930/http://readwrite.com/2011/01/25/wait-whats-nodejs-good-for-aga|fechaarchivo=21 de junio de 2013}}</ref> Fue creado por [[Ryan Dahl]] en 2009 y su evolución está apadrinada por la empresa [[Joyent]], que además tiene contratado a Dahl en plantilla.<ref>https://mashable.com/2011/03/10/node-js/</ref> <ref name="Node.js pushes JavaScript to the server-side">{{cita web |url= http://www.sdtimes.com/NODE_JS_PUSHES_JAVASCRIPT_TO_THE_SERVER_SIDE/By_Alex_Handy/About_JAVASCRIPT_and_NODEJS/35668 |título= Node.js pushes JavaScript to the server-side |autor= Alex Handy |editorial= SDTimes |fecha= 24 de junio de 2011 |fechaacceso= 24 de junio de 2011}} </ref> Node.js es similar en su propósito a [[Twisted (software)|Twisted]] o [[Tornado (servidor web)|Tornado]] de [[Python]], [[Perl Object Environment]] de [[Perl]], [[libevent]] o [[libev]] de [[C (lenguaje de programación)|C]], [[EventMachine]] de [[Ruby]], [[vibe.d]] de [[D (lenguaje de programación)|D]] y [[Java EE]] de [[Java (lenguaje de programación)|Java]] existe [[Apache MINA]], [[Netty]], [[Akka]], [[Vert.x]], [[Project Grizzly (Software)|Grizzly]] o [[Xsocket]]. Al contrario que la mayoría del código [[JavaScript]], no se ejecuta en un navegador, sino en el servidor. Node.js implementa algunas especificaciones de [[CommonJS]].<ref>https://web.archive.org/web/20110724011601/http://wiki.commonjs.org/wiki/Implementations/node.js</ref> Node.js incluye un entorno [[Read–eval–print loop|REPL]] para depuración interactiva. == Ejemplos == [[Archivo:Ryan Dahl.jpg|miniaturadeimagen|Ryan Dahl (nacido en 1981) es un ingeniero de software estadounidense, conocido por crear Node.js y Deno.]] Versión de un [[hola mundo]] de un [[Servidor web|servidor HTTP]] escrito en Node.js: <syntaxhighlight lang="javascript"> const http = require('http'); const hostname = '127.0.0.1'; const port = 1337; http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello World\n'); }).listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); }); </syntaxhighlight> Otro ejemplo con un servidor [[Transmission Control Protocol|TCP]] que escucha en el [[Puerto de red|puerto]] 7000 y responde con cualquier cosa que se le envíe: <syntaxhighlight lang="javascript"> var net = require('net'); net.createServer(function (stream) { stream.write('hello\r\n'); stream.on('end', function () { stream.end('goodbye\r\n'); }); stream.pipe(stream); }).listen(7000); </syntaxhighlight> Otro ejemplo, pero ahora con discord.js. Este es el código básico para hacer funcionar un bot en [[Discord]] <syntaxhighlight lang="javascript"> const { Client, Intents } = require('discord.js'); const client = new Client({ intents: [Intents.FLAGS.GUILDS] }); client.on('ready', () => { console.log(`Logged in as ${client.user.tag}!`); }); client.on('interactionCreate', async interaction => { if (!interaction.isCommand()) return; if (interaction.commandName === 'ping') { await interaction.reply('Pong!'); } }); client.login('token'); </syntaxhighlight> == Aspectos técnicos == === Concurrencia === Node.js funciona con un modelo de evaluación de un único [[hilo de ejecución]], usando entradas y salidas asíncronas las cuales pueden ejecutarse concurrentemente en un número de hasta cientos de miles sin incurrir en costos asociados al [[cambio de contexto]].<ref>https://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/</ref> Este diseño de compartir un único hilo de ejecución entre todas las solicitudes atiende a necesidades de aplicaciones altamente concurrentes, en el que toda operación que realice entradas y salidas debe tener una función [[callback (informática)|callback]]. Un inconveniente de este enfoque de único hilo de ejecución es que Node.js requiere de módulos adicionales como ''cluster''<ref>[https://nodejs.org/api/cluster.html cluster]</ref> para escalar la aplicación con el número de [[Procesador multinúcleo|núcleos de procesamiento]] de la máquina en la que se ejecuta. === V8 === [[V8 (motor JavaScript)|V8]] es el entorno de ejecución para JavaScript creado para [[Google Chrome]]. Es software libre desde 2008, está escrito en [[C++]] y compila el código fuente JavaScript en [[código de máquina]] en lugar de interpretarlo en tiempo real. Node.js contiene [[libuv]] para manejar eventos asíncronos. Libuv es una capa de abstracción de funcionalidades de redes y sistemas de archivo en sistemas Windows y sistemas basados en [[POSIX]] como Linux, Mac OS X y Unix. El cuerpo de operaciones de base de Node.js está escrito en JavaScript con métodos de soporte escritos en C++. === Módulos === Node.js incorpora varios "módulos básicos" compilados en el propio binario, como por ejemplo el módulo de red, que proporciona una capa para programación de red asíncrona y otros módulos fundamentales, como por ejemplo Path, FileSystem, Buffer, Timers y el de propósito más general Stream. Es posible utilizar módulos desarrollados por terceros, ya sea como archivos ".node" precompilados, o como archivos en Javascript plano. Los módulos Javascript se implementan siguiendo la especificación [[CommonJS]] para módulos,<ref>{{cita web|título=CommonJS Implementations|url=http://www.commonjs.org/impl/|fechaacceso=15 de mayo de 2011|urlarchivo=https://web.archive.org/web/20100323020058/http://commonjs.org/impl/|fechaarchivo=23 de marzo de 2010}}</ref> utilizando una variable de exportación para dar a estos scripts acceso a funciones y variables implementadas por los módulos.<ref>{{cita web|apellido=Ryswyck|nombre=Jan|título=Taking Baby Steps with Node.js – CommonJS and Creating Custom Modules|url=http://elegantcode.com/2011/02/04/taking-baby-steps-with-node-js-commonjs-and-creating-custom-modules/|fechaacceso=15 de mayo de 2011|urlarchivo=https://web.archive.org/web/20110628032051/http://elegantcode.com/2011/02/04/taking-baby-steps-with-node-js-commonjs-and-creating-custom-modules/|fechaarchivo=28 de junio de 2011}}</ref> Los módulos de terceros pueden extender node.js o añadir un nivel de abstracción, implementando varias utilidades middleware para utilizar en aplicaciones web, como por ejemplo los frameworks ''connect'' y ''express''. Pese a que los módulos pueden instalarse como archivos simples, normalmente se instalan utilizando el ''Node Package Manager (npm)'' que nos facilitará la compilación, instalación y actualización de módulos así como la gestión de las dependencias. Además, los módulos que no se instalen en el directorio por defecto de módulos de Node necesitarán la utilización de una ruta relativa para poder encontrarlos. El [https://github.com/joyent/node/wiki/modules wiki Node.js] proporciona una lista de varios de los módulos de terceros disponibles. === Desarrollo homogéneo entre cliente y servidor === Node.js puede ser combinado con una [[base de datos documental]] (por ejemplo, [[MongoDB]] o [[CouchDB]]) y [[bases de datos relacionales]] como [[MySQL]], [[PostgreSQL]], entre otros, lo que permite desarrollar en un entorno de desarrollo JavaScript unificado. Con la adaptación de los [[patrón de software|patrones]] para desarrollo del lado del servidor tales como [[Modelo–vista–controlador|MVC]] y sus variantes [[Modelo–vista–presentador|MVP]], [[Modelo–vista–modelo de vista|MVVM]], etc. Node.js facilita la [[reutilización de código]] del mismo modelo de interfaz entre el lado del cliente y el lado del servidor. === Bucle de eventos === Node.js se registra con el sistema operativo y cada vez que un cliente establece una conexión se ejecuta un callback. Dentro del entorno de ejecución de Node.js, cada conexión recibe una pequeña asignación de espacio de memoria dinámico, sin tener que crear un hilo de ejecución.<ref>[https://nodejs.org/about/ About Node.js], Node.js Website</ref> A diferencia de otros servidores dirigidos por eventos, el bucle de gestión de eventos de Node.js no es llamado explícitamente sino que se activa al final de cada ejecución de una función callback. El bucle de gestión de eventos se termina cuando ya no quedan eventos por atender. == Versiones == Las nuevas versiones principales de Node.js se sacan de la rama máster de [[GitHub]] cada seis meses. Las versiones pares se sacan en abril, y las impares en octubre. Cuando se libera una versión impar, la versión par anterior pasa a soporte a largo plazo (Long Term Support, LTS), que da a la versión un soporte activo de 18 meses desde la fecha de inicio de la LTS. Después de estos 18 meses, la versión recibe otros 12 meses de soporte de mantenimiento. Una versión activa recibirá los cambios compatibles unas pocas semanas después de que aterricen en la versión estable actual. Una versión de mantenimiento recibirá solamente actualizaciones críticas y de documentación.<ref name="release">{{Cite web|url=https://github.com/nodejs/Release|title=nodejs/Release|website=GitHub|language=en|access-date=24 de septiembre de 2025}}</ref> La estrategia y política de las versiones LTS se gestiona por el LTS Working Group en colaboración con el Technical Steering Committee de [[Node.js Foundation]]. {| class="wikitable" style="text-align:center;" !Versión !Nombre !Fecha de<br>liberación !Estado LTS !Inicio LTS !Inicio de<br>mantenimiento !Fin de <br>mantenimiento |- |{{Version|o|v0.10.x}} || ||2013-03-11 || {{Version|o|Sin soporte}} || - ||2015-10-01 ||2016-10-31 |- |{{Version|o|v0.12.x}} || ||2015-02-06 || {{Version|o|Sin soporte}} || - ||2016-04-01 ||2016-12-31 |- |{{Version|o|4.x}} || Argon<ref name="release"/> ||2015-09-08 || {{Version|o|Sin soporte}} ||2015-10-01 ||2017-04-01 ||2018-04-30 |- |{{Version|o|5.x}} || ||2015-10-29 || {{No|No LTS}} || colspan="2" |N/D ||2016-06-30 |- |{{Version|o|6.x}} || Boron<ref name="release"/> ||2016-04-26 || {{Version|o|Sin soporte}} ||2016-10-18 ||2018-04-30 ||2019-04-30 |- |{{Version|o|7.x}} || ||2016-10-25 || {{No|No LTS}} || colspan="2" |N/D ||2017-06-30 |- |{{Version|o|8.x}} || Carbon<ref name="release"/> ||2017-05-30 || {{Version|o|Sin soporte}} ||2017-10-31 ||2019-01-01 ||2019-12-31 |- |{{Version|o|9.x}} || ||2017-10-01 || {{No|No LTS}} || colspan="2" |N/D ||2018-06-30 |- |{{Version|o|10.x}} || Dubnium<ref name="release"/> ||2018-04-24 || {{Version|o|Sin soporte}} ||2018-10-30 ||2020-05-19 ||2021-04-30 |- |{{Version|o|11.x}} || ||2018-10-23 || {{No|No LTS}} || colspan="2" |N/D ||2019-06-01 |- |{{Version|o|12.x}} || Erbium<ref name="release"/> ||2019-04-23 || {{Version|o|Sin soporte}} ||2019-10-21 ||2020-11-30 ||2022-04-30 |- |{{Version|o|13.x}} || ||2019-10-22 || {{No|No LTS}} || - ||2020-04-01 ||2020-06-01 |- |{{Version|o|14.x}} || Fermium<ref name="release"/> ||2020-04-21 || {{Version|o|Sin soporte}} ||2020-10-27 ||2021-10-19 ||2023-04-30 |- |{{Version|o|15.x}} || ||2020-10-22 || {{No|No LTS}} || - ||2021-04-01 ||2021-06-01 |- |{{Version|o|16.x}} || Gallium<ref name="release"/> ||2021-04-20 || {{Version|o|Sin soporte}} ||2021-10-26 ||2022-10-18 ||2023-09-11 |- |{{Version|o|17.x}} || ||2021-10-19 || {{No|No LTS}} || colspan="2" |N/D ||2022-06-01 |- |{{Version|o|18.x}} || Hydrogen<ref name="release"/> ||2022-04-19 || {{Version|o|Sin soporte}} ||2022-10-25 ||2023-10-18 ||2025-04-30 |- |{{Version|o|19.x}} || ||2022-10-18 || {{No|No LTS}} || colspan="2" |N/D ||2023-06-12 |- |{{Version|co|20.x}} || Iron<ref name="release"/> ||2023-04-18 || {{Version|co|Mantenimiento LTS}} ||2023-10-24 ||2024-10-22 ||2026-04-30 |- |{{Version|o|21.x}} || ||2023-10-17 || {{No|No LTS}} || colspan="2" |N/D ||2024-06-01 |- |{{Version|c|22.x}} || Jod<ref name="release"/> ||2024-04-24 || {{Version|c|Activo LTS}} ||2024-10-29 ||2025-10-21 ||2027-04-30 |- |{{Version|o|23.x}} || ||2024-10-16 || {{No|No LTS}} || colspan="2" |N/D ||2025-06-01 |- |{{Version|c|24.x}} || ||2025-05-06 || {{Version|c|Actual}} ||2025-10-28 ||2026-10-20 ||2028-04-30 |- |{{Version|o|25.x}} || ||2025-10-21 || {{No|No LTS}} || colspan="2" |N/D ||2026-06-01 |- |{{Version|cp|26.x}} || ||2026-04-21 || {{Version|cp|Prevista LTS}} ||2026-10-20 ||2027-10-19 ||2029-04-30 |} == Comunidad == Existe una comunidad muy activa de desarrolladores de Node.js que se comunican a través de grupos de discusión, [http://groups.google.com/group/nodejs nodejs] y [http://groups.google.com/group/nodejs-dev nodejs-dev] y el canal [[IRC]] #node.js en [[freenode]]. La comunidad se reúne en [http://nodeconf.com/ NodeConf], una convención de desarrolladores centrada en Node.js.<ref>{{cita web |url=http://www.readwriteweb.com/hack/2011/04/nodeconf-schedule-announced.php |título=Copia archivada |fechaacceso=2 de agosto de 2014 |urlarchivo=https://web.archive.org/web/20120917214119/http://www.readwriteweb.com/hack/2011/04/nodeconf-schedule-announced.php |fechaarchivo=17 de septiembre de 2012 }}</ref> == Véase también == * [[JavaScript]] * [[V8 (motor JavaScript)|V8]] * [[Npm|NPM]], el gestor de paquetes para Node.js. * Entorno de desarrollo [[MEAN]] * [[Meteor (framework web)]] == Referencias == {{listaref}} == Enlaces externos == * [http://nodejs.org Sitio oficial] (inglés) * [https://github.com/joyent/node Repositorio de código fuente] (inglés) * [http://groups.google.com/group/nodejs Lista de correo Nodejs] - Grupo de discusión sobre Node.js (inglés) * [http://groups.google.com/group/nodejs-dev Lista de correo Nodejs-dev] - Grupo de discusión sobre fallos y cambios en Node.js (inglés) * [http://npmjs.org/ NPMJS. El gestor de paquetes de Node.js] (inglés) * [https://web.archive.org/web/20110410105248/http://howtonode.org/ ''How To Node'', tutorial de Node.js] (inglés) * [https://syskall.com/how-to-write-your-own-native-nodejs-extension Como desarrollar tu propia extensión nativa para Node.js] (inglés) * [http://nodenica.com/ ''NodeNica'', comunidad nicaragüense de Node.js] (español) * [https://people.ac.upc.edu/marisa/miso/concurrencia.pdf ''Concurrencia y paralelismo'', por Marisa Gil] (español) * [https://apuntes.de/nodejs/ Curso de NodeJS] (español) * [https://www.bastify.com/hosting-nodejs Hosting NodeJS] (español) {{Control de autoridades}} [[Categoría:Bibliotecas de JavaScript]] [[Categoría:Software libre programado en C++]]
Resumen:
Al guardar los cambios aceptas los
términos de uso
y liberas de forma irrevocable tu contribución conforme a los términos de las licencias
licencia CC BY-SA 4.0
y
GFDL
. Aceptas igualmente que un hipervínculo o URL es atribución suficiente conforme a la licencia Creative Commons.
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Buscar
Buscar
Edición de «
Node.js
»
Añadir idiomas
Añadir tema