You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: data/blog/nodejs/Guia-para-aprender-nodejs.mdx
+262Lines changed: 262 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,3 +6,265 @@ draft: false
6
6
summary: 'En esta guía, aprenderás los conceptos fundamentales de Node.js. Está inspirada en las lecciones del curso de Fernando Herrera, adaptadas para que puedas comenzar a trabajar con Node.js desde lo básico hasta conceptos más avanzados'
7
7
authors: ['default']
8
8
---
9
+
10
+
[fundamentos de nodejs](#fundamentos-de-nodejs)
11
+
12
+
13
+
## Fundamentos de nodejs
14
+
15
+
### Preguntas comunes sobre nodejs
16
+
#### Que es nodejs?
17
+
Nodejs es un Ambiente de ejecucion para ejecutar javascript Desligado del navegador web.
18
+
#### Que lo Hace Especial?
19
+
*Motor* : COdigo Abierto con el motor de v8 de Google y esta diseñado para realizar tareas de E/S(entrada y salida) junto con el manejo de archivos de la computadora cliente/servidor
20
+
21
+
*Caracteristicas*
22
+
- Asincronia
23
+
- Modulos Nativos y de terceros
24
+
- Gestion de paquetes con Npm
25
+
- Construccion De servidores
26
+
- Escalabilidad
27
+
- Multiple Plataforma
28
+
29
+
#### Non-Blocking I/obtener
30
+
Casi Ninguna Funcion en Node Bloquea la lectura, por lo que podemos tener cientos de peticiones sin bloquear el servidor
31
+
32
+
Npm(Node Packajge Manager) es el gestor de paquetes con mayor crecimiento y paquetes desplegados
33
+
34
+
Node Tambien es muy usado para crear herramientas y ejecutar paquetes sin tener que instalarlos con NPX (Node Package Execute)
35
+
36
+
Ejemplo si el archivo es muy grande o su lectura lenta, de igual forma 'moreWork()' se ejecuta primero
37
+
```Bash
38
+
const fs = require('fs')
39
+
40
+
fs.readFile('/file.md', (err,data)=>{
41
+
if(err) throw err;
42
+
console.log(data)
43
+
})
44
+
45
+
46
+
moreWork() // se ejecuta antes del console.log
47
+
```
48
+
#### Blocking
49
+
Basicamente Cuando la ejecucion del codigo debe de esperar a que se complete el proceso pero este a su vez, impide que se sigan ejecutando otras instrucciones en paralelo
50
+
51
+
ejemplo de codigo bloqueate, se debe de leer completamente el archivo para poder continuar.
52
+
```Bash
53
+
const fs = require('fs')
54
+
/// bloquea hasta que el archivo es leido
55
+
const data = fs.readFileSync('/file.md');
56
+
console.log(data)
57
+
58
+
moreWork() // se ejecuta despues del console.log
59
+
```
60
+
61
+
### Hola mundo en nodejs
62
+
aca relizaremos nuestro primer 'hola Mundo'
63
+
para esto debemos ir a nuestro navegador y abrir el inspector he ir a consola y dentro de la consola podremos ejecutar codigo de nodejs
aca lo hemos ejecutado en el navegador pero ahora debemos ejecutarlo desde una terminal para eso abriremos cualquier terminal que tengamos ya sea powershell, cmd etc..
66
+
tambien debes tener instalado nodejs en tu computadora puedes instalarlo desde su pagina oficial [instalar nodejs](https://nodejs.org/en/download)
67
+
68
+
para este paso aca ejecutaremos los siguientes comandos
69
+
```Bash
70
+
node --version //comprobar que node este instalado
71
+
const message = 'hola mundo' // crear la constante para guardar el mensaje
72
+
message // ejecutar el mensaje desde nuestra consola
para este punto lo primero es crear una carpeta en nuestro escritorio y abrirla desde nuestro editor de codigo
79
+
80
+
ahora ejecutaremos nodejs desde nuestro Ide o Editor de codigo yo en este caso estare usando vscode
81
+
iremos a la ruta de nuestra carpeta si no estamos
82
+
83
+
84
+
```bash
85
+
cd C:\Users\jose\Desktop\WebNicho\fulllstack\nodejs\01-fundamentos
86
+
```
87
+
88
+
y crearemos un archivo app.js dentro de nuestra carpeta
89
+
90
+
```javascript
91
+
app.js
92
+
```
93
+
dentro de nuestro archivo vamos a pegar el siguiente codigo
94
+
95
+
```bash
96
+
const message = 'Hola Mundo'
97
+
console.log(message)
98
+
99
+
```
100
+
ahora si ejecutamos esto en nuestro terminal de node podremos ejecutar el archivo de js con nodejs
101
+
102
+
```bash
103
+
node app
104
+
```
105
+
y veremos el mensaje de 'hola mundo' desde nuestro terminal
106
+
107
+
### Leer Archivos
108
+
ahora en este ejemplo leeremos archivos para eso vamos a crear un nuevo archivo en nuestra carpeta y lo llamaremos 'Readme.md'
109
+
y pegaremos todo el texto que se encuentra en el readme de la documentacion de react [documentacion de react](https://github.com/facebook/react/blob/main/README.md)
110
+
111
+
ahora crearemos un nuevo archivo Llamado 'app2.js'
112
+
y pegaremos el siguiente codigo
113
+
114
+
```bash
115
+
const fs = require('fs') // fs es una funcion propia de nodejs
116
+
117
+
// con esta funcion podremos leer el archivo y utf8 es para el tipo de caracteres que debemos leer
118
+
const data = fs.readFileSync('Readme.md','utf8')
119
+
120
+
console.log(data)
121
+
```
122
+
y si ejecutamos esto en la consola va a leer todo el archivo
123
+
124
+
ejecutamos con
125
+
```bash
126
+
node app2.js
127
+
```
128
+
podriamos modificar el archivo
129
+
130
+
```Bash
131
+
const fs = require('fs')
132
+
133
+
const data = fs.readFileSync('Readme.md','utf8')
134
+
// esto modifica los datos y cambia todas las palabras que sean React por Angular
ReactWordCount = content.match(/react/gi ?? []).length // lo podriamos hacer tambien con un filter pero de esta manera es mucho mas precisom usando regex
170
+
171
+
console.log('palabras',wordCount)
172
+
console.log('palabra React', ReactWordCount)
173
+
```
174
+
175
+
### Event Loop & Code Execution
176
+
177
+
```bash
178
+
console.log('Inicio del programa');
179
+
180
+
setTimeout(() => {
181
+
console.log('setTimeout ejecutado');
182
+
}, 0);
183
+
184
+
setImmediate(() => {
185
+
console.log('setImmediate ejecutado');
186
+
});
187
+
188
+
process.nextTick(() => {
189
+
console.log('process.nextTick ejecutado');
190
+
});
191
+
192
+
console.log('Fin del programa');
193
+
194
+
```
195
+
### Explicación:
196
+
197
+
1. Se imprime `"Inicio del programa"`.
198
+
2.`setTimeout` se programa con un tiempo de espera de `0` ms, pero no se ejecuta inmediatamente.
199
+
3.`setImmediate` también se programa para ejecutarse en la fase de "check" del event loop.
200
+
4.`process.nextTick` se ejecuta antes de que el event loop avance a la siguiente fase, por lo que se ejecuta antes que `setTimeout` y `setImmediate`.
201
+
5. Se imprime `"Fin del programa"`.
202
+
6.`process.nextTick` se ejecuta inmediatamente después del código síncrono.
203
+
7.`setTimeout` y `setImmediate` se ejecutan en sus respectivas fases del event loop.
204
+
205
+
El orden de ejecución en la consola generalmente será:
206
+
207
+
```
208
+
Inicio del programa
209
+
Fin del programa
210
+
process.nextTick ejecutado
211
+
setTimeout ejecutado
212
+
setImmediate ejecutado
213
+
```
214
+
215
+
Esto demuestra cómo el event loop maneja diferentes tipos de tareas en Node.js. 🚀
216
+
217
+
### ejecucion del codigo
218
+
219
+
El proceso de ejecución en Node.js comienza cuando el código es colocado en el **Call Stack**. Si la tarea es sincrónica, se ejecuta y se elimina de inmediato. Si es asíncrona (como una operación de E/S o un temporizador), se delega a **libuv**, que la registra y la ejecuta en segundo plano. Una vez completada, la tarea es enviada de vuelta para ser procesada y finalmente eliminada del Call Stack, permitiendo que la siguiente instrucción continúe su ejecución.
220
+
221
+

222
+
223
+
### Event Loop
224
+
Aquí tienes una versión mejorada con una descripción clara del **Event Loop** y la analogía bien explicada:
225
+
226
+
227
+
### **¿Qué es el Event Loop?**
228
+
El **Event Loop** es el mecanismo fundamental de **Node.js** que permite la ejecución de operaciones **asíncronas** sin bloquear el flujo del programa. Se encarga de gestionar tareas en segundo plano y ejecutarlas en el momento adecuado.
229
+
230
+
Cuando se ejecuta código en Node.js, las operaciones sincrónicas se procesan de inmediato en la **pila de llamadas (Call Stack)**, mientras que las tareas asíncronas (como temporizadores, operaciones de E/S o promesas) se delegan al **sistema de manejo de eventos** y se colocan en una **cola de tareas** para ser ejecutadas posteriormente cuando el Call Stack esté vacío.
231
+
232
+
El **Event Loop** es el encargado de revisar constantemente si hay tareas pendientes en la cola y ejecutarlas cuando corresponda.
233
+
234
+
235
+
### **Analogía del Event Loop con una cocina**
236
+
237
+
Imagina que el **Event Loop** es una **madre cocinera**, que debe preparar la comida siguiendo un proceso eficiente.
238
+
239
+
-**El hijo (libuv)** es su ayudante, que se encarga de traer los ingredientes de la tienda.
240
+
-**La mesa (cola de tareas)** es el lugar donde se colocan los ingredientes listos para ser procesados.
241
+
-**El pollo (tarea asíncrona)** es un ingrediente que el hijo debe traer antes de que la madre pueda cocinarlo.
242
+
243
+
#### **Paso a paso en la cocina:**
244
+
1️⃣ **La madre (Event Loop) comienza a cocinar con los ingredientes que ya tiene** (ejecuta el código sincrónico).
245
+
2️⃣ **El hijo (libuv) recibe un encargo de pollo (una tarea asíncrona, como leer un archivo o hacer una petición a la base de datos).**
246
+
3️⃣ **Mientras el hijo va por el pollo, la madre sigue cocinando con lo que ya tiene** (Node.js sigue ejecutando otras tareas disponibles).
247
+
4️⃣ **Cuando el hijo vuelve con el pollo (la tarea asíncrona se completa), lo coloca en la mesa (cola de tareas).**
248
+
5️⃣ **La madre revisa la mesa y, si el pollo está listo, lo cocina y lo sirve** (el Event Loop ejecuta la tarea cuando el Call Stack está libre).
249
+
6️⃣ **El proceso se repite, asegurando que todas las tareas se manejen de manera eficiente y sin bloquear la cocina.**
250
+
251
+
252
+
### **Conclusión**
253
+
- El **Event Loop (madre)** organiza y ejecuta las tareas cuando es el momento adecuado.
254
+
-**libuv (hijo)** maneja tareas asíncronas y las coloca en la **cola de tareas (mesa)** cuando están listas.
255
+
-**El código sincrónico se ejecuta de inmediato, mientras que las tareas asíncronas se resuelven cuando el Event Loop las procesa.**
256
+
257
+
Así es como Node.js gestiona múltiples tareas sin bloquear la ejecución del programa. 🚀🔥
#### cuando se completa una tarea asincrona en libuv, En que momento decide Node Ejecutar la funcion callback asociada en la pila de llamada (callstack)?
265
+
- Callbacks son ejecutados solo cuando el callstack esta vacio
266
+
#### Node espera a que la pila de llamdas este vacia antes de ejecutar un callback o interrumpe el flujo normal de ejecucion para ejecutar el callback?
267
+
- el flujo normal de ejecucion no se interrumpira para ejecutar una funcion de devolucion de llamada
268
+
269
+
#### si do tareas asincronas como setTimeout y readFile se completan al mismo Tiempo, Como se decide Node que callback ejecutar primero en la pila de llamdas? , uno tiene prioridad sobre el otro?
270
+
los callbacks de temporizador se ejecutar antes que las devoluciones de llamda I/O, incluso si ambas estan listas exactamente al mismo tiempo.
0 commit comments