Inicio del curso

1

驴Qu茅 vamos a construir en el curso avanzado de Node.js?

Introducci贸n a Node.js

2

Conoce qu茅 es node.js

3

Caracter铆sticas de la plataforma Node.js

4

驴Qu茅 tipo de aplicaciones podemos desarrollar con Node.js?

Preparando el entorno de Desarrollo

5

C贸mo instalar Node.js en macOS

6

C贸mo instalar PostgreSQL y Redis en macOS

7

C贸mo instalar Visual Studio Code en macOS

8

C贸mo instalar Ansible en macOS

Arquitectura del Proyecto (Platziverse)

9

Arquitectura y Componentes del proyecto

Introducci贸n a protocolos y patrones de aplicaciones en tiempo real

10

C贸mo funciona el modelo Pub/Sub en MQTT y Web Sockets

Creando M贸dulo de Base de Datos (platziverse-db)

11

Estructura b谩sica de un m贸dulo de Node.js

12

Definici贸n de entidades de base de datos

13

Implementaci贸n de modelos con sequelize

14

Implementaci贸n de un m贸dulo b谩sico de base de datos

15

Implementaci贸n de script de inicializaci贸n de base de datos

16

Creando una advertencia sobre el borrado de base de datos

17

Introducci贸n a pruebas unitarias con Ava.js

18

Introducci贸n a code coverage con nyc

19

C贸mo hacer Mocks y Stubs con Sinon

20

Creaci贸n de fixtures y definici贸n b谩sica del servicio de Agent

21

Implementaci贸n de findbyId y pruebas en el servicio Agent

22

Implementaci贸n de createOrUpdate

23

Revisi贸n del servicio Agent

24

Implementaci贸n del servicio Metric

25

Realizando un ejemplo con el m贸dulo de base de datos

26

Reto: C贸mo modificar el script de inicializaci贸n de la base de datos

Construyendo un servidor en tiempo real para Internet de las Cosas con Mosca/MQT

27

Definici贸n de un Broker de Mensajer铆a

28

Definici贸n de los tipos de mensajes

29

Implementaci贸n del servidor MQTT

30

C贸mo recibir mensajes

31

C贸mo integrar el servidor MQTT con la base de datos

32

C贸mo almacenar la informaci贸n del agente y reportar el agente conectado

33

C贸mo almacenar la informaci贸n de las m茅tricas

34

Probando el servidor MQTT (Ejemplo con mqtt client)

Construyendo el agente de monitoreo (platziverse-agent)

35

C贸mo implementar un custom EventEmitter usando ES6 classes

36

Definiendo un timer de ejecuci贸n continua (setInterval)

37

Implementaci贸n del cliente MQTT

38

Implementaci贸n de m茅tricas personalizadas

39

Probar agent (ejemplo)

Construyendo una API REST con Express (platziverse-api)

40

Implementaci贸n de un servidor b谩sico con express

41

Definici贸n de rutas del API

42

Implementaci贸n de manejo de errores con express

43

Pruebas b谩sicas de Integraci贸n con Ava y supertest

44

Integraci贸n con el m贸dulo de base de datos

45

Implementaci贸n de ruta del API

46

Pruebas de Integraci贸n con Ava, Supertest y Sinon

Asegurando nuestra API REST con JWT

47

Definici贸n de JWT

48

Asegurando nuestra API con express-jwt

49

Modificando las pruebas de integracion

50

Implementando permisos con express-jwt-permissions

Creando un Dashboard Web en tiempo real con WebSockets (platziverse-web)

51

Implementaci贸n de un servidor web est谩tico con express

52

Integrando socket.io con express

53

Integrando agente de monitoreo con socket.io

54

Implementaci贸n de rutas proxy con la API

55

Presentaci贸n de nuestro cliente frontend en Vue.js

56

Integraci贸n del cliente frontend con API (Metric)

57

Integraci贸n del cliente frontend con socket.io (Metric)

58

Integraci贸n del cliente frontend con API (Agent)

59

Integraci贸n del cliente frontend con socket.io (Agent)

Creando un Dashboard para la terminal en tiempo real con Blessed (platziverse-cl)

60

Implementaci贸n de un CLI B谩sico con Node

61

Introducci贸n a Blessed / Blessed Contrib

62

Implementaci贸n del layout b谩sico con Blessed Contrib

63

Integraci贸n con el agente de monitoreo 1

64

Integraci贸n con el agente de monitoreo 2

65

Integraci贸n con el agente de monitoreo 3

Depurando Aplicaciones Node.js

66

Utilizando longjohn para mejores stacktraces

67

Depurando en Desarrollo con node --inspect

68

Depurando en Desarrollo con Visual Studio Code

Preparando nuestra aplicaci贸n para producci贸n

69

Preparando Proyecto para Producci贸n 1

70

Preparando Proyecto para Producci贸n 2

71

Creaci贸n de scripts para despliegue con Ansible

72

Probando el database rol con Vagrant

73

Creando scripts del rol de platziverse db y mqtt (script de automatizaci贸n .yml)

74

Terminando los scripts faltantes

75

Creaci贸n de servidores en DigitalOcean

Desplegando nuestra aplicaci贸n a producci贸n

76

Ejecutando los Scripts de Despliegue

77

Utilizando Aplicaci贸n en Producci贸n y cierre del curso

Bonus: Utilizando platziverse-agent en BeagleBone Black y Raspberry PI

78

Implementaci贸n platziverse-agent con Johnny-Five

Caracter铆sticas de la plataforma Node.js

3/78
Recursos

Networking y entrada y salida: M谩s de 1/4 del core de Node.js est谩 dedicado a Networking.
Node.js est谩 especialmente dise帽ado para tipos de trabajo de entrada y salida.

Node.js es modular. npm es el registro de paquetes OpenSource m谩s grande del mundo.
El sistema modular de Node.js resuelve los problemas dependency hell.

La caracter铆stica principal de Node.js es que podemos trabajar de manera as铆ncrona y orientada a objetos.

Node.js es muy bueno para aplicaciones en tiempo real o para orquestaci贸n de recursos entre m煤ltiples aplicaciones.

Node.js no es bueno para computaciones que requieren uso de la CPU, ni para desarrollar aplicaciones como Systems programming.

Aportes 33

Preguntas 2

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

Pinta que 茅s multiusos 馃槂 Haber si lo entiendo mejor que el de fundamentos de JS

Para que es bueno

  • Aplicaciones en Red
  • Aplicaciones de entrada y salida
  • Orquestaci贸n entre m煤ltiples aplicaciones

Para que no es bueno

  • Bigdata
  • Muchos datos no es entrada y salida, necesita mucha CPU
  • Aplicaciones de Sistemas y para manejar componentes nativas.

Networking y I/O
Un poco m谩s de 1/4 del core de Node est谩 dedicado a Networking y I/O. Libuv es la librer铆a que se encarga de las comunicaciones en la red y el acceso de entrada y salida del sistema de archivos. Teniendo en cuenta lo anterior Node es muy 煤til creando aplicaciones de entrada y salida (con alta concurrencia y cargas de trabajo muy altas, como leer archivos muy grandes) y aplicaciones que requieran transmitir informaci贸n en la red de cierta manera.

Dentro del peque帽o core de Node existen m贸dulos que permiten que esta plataforma sea tan poderosa en la creaci贸n networking, algunos de estos son:

  • HTTP: Para usar servidores HTTP.
  • HTTPS: HTTPS es el protocolo seguro de HTTP, usando TLS/SSL.
  • Net: Proporciona una API de red as铆ncrona para la creaci贸n de TCP basada en secuencias o IPC.
  • Dgram: Presenta una implementaci贸n de sockets UDP.
  • DNS: Funciones para resolver nombres, ya sea conect谩ndose a un servidor DNS o con operaciones del sistema operativo subyacente.

Modular
El userland de Node es NPM (The Node Package Manager) el manejador de paquetes m谩s grande del mundo, adem谩s es open source lo que permite que el ecosistema de Node sea muy grande y crezca cada vez m谩s.

La modularidad de Node se debe en gran medida a la filosof铆a de que 鈥渓os m贸dulos deben ser peque帽os, que se concentren en hacer una cosa y que la hagan bien鈥 (alta cohesi贸n), de esta forma las aplicaciones de Node son un sistema de m贸dulos especializados que interact煤an entre s铆, esto a su vez hace que las aplicaciones no sea monol铆ticas o monolito (una aplicaci贸n monol铆tica se puede entender como una aplicaci贸n en la que los m贸dulos son muy dependientes entre ellos, alto acoplamiento, lo cual es indeseable en desarrollo de software pues es aplicaci贸n muy dificil de mantener).

El hecho de que las aplicaciones se trabajen como un sistema de m贸dulos logra que se resuelva un problema muy com煤n que es el dependency hell (infierno de dependencias, aqu铆 un ejemplo) el cual se resultado de conflictos entre las versiones de las dependencias de un proyecto, que pueden entrar en conflicto con las de otra aplicaci贸n o proyecto, Node soluciona esto infierno de dependencias de manera local y por proyecto, debido a que su cargador de m贸dulos puede cargar dos o m谩s versiones de un mismo m贸dulo sin que entren en conflicto, fuente. Un ejemplo de un m贸dulo peque帽o y especializado es Archy.

JavaScript en el servidor
JavaScript es el lenguaje del navegador (y ning煤n otro lenguaje est谩 cerca de sustituirlo), le da interactividad a la web de lado del cliente (frontend), con Node JavaScript ha llegado al servidor, esto hace que a un desarrollador frontend se le haga m谩s f谩cil desarrollar de parte del servidor (backend) pues es el mismo lenguaje tanto para front como para back haciendo que sean altamente productivos.

As铆ncrono
Sumado a lo anterior EcmaScript est谩 trabajando constantemente mejorando el lenguaje, y dichas mejoras como: async await, clases, promesas nativas, entre otras, lleguen a Node haciendo que la experiencia de desarrollo sea m谩s agradable. Estas nuevas caracter铆sticas permiten que en Node se trabaje de una forma as铆ncrona y orientada a eventos, lo que hace que sea un plataforma ideal para aplicaciones en tiempo real.

La programaci贸n as铆ncrona en Node es posible por medio de callbacks, eventos y promesas. En Node las operaciones de entrada y salida no hacen que el event loop se bloquee, 驴c贸mo es esto posible si solo tenemos disponible un hilo? bueno, esto es posible debido a que aunque solo tengamos un hilo disponible para el usuario (es decir, las tareas se van a帽adiendo de forma secuencial a una cola de tareas), Node tiene 4 hilos, por defecto, para ejecutarlas, as铆 se pueden ejecutar tareas sin bloquear el hilo de ejecuci贸n de la aplicaci贸n. Este video es excelente para entender c贸mo funciona el event loop en JavaScript y este art铆culo para entender c贸mo funciona en Node.

Pros y contras
Pros: Node es muy bueno para aplicaciones en tiempo real (orientadas en la red y en operaciones de entrada y salida) o para orquestaci贸n de recursos entre m煤ltiples aplicaciones.

Contras: Node no es bueno para computaciones que requieren uso de la CPU, ni para desarrollar aplicaciones c贸mo systems programming.

dependecy HELL, me hace recordar esos clientes que quieren 1000000000000 plugins en sus wordpress jejeje

SI NodeJS tiene como debilidad el uso de proceso de calculo o procesamiento de mucha informaci贸n, que podemos complementar para poder salir airosos con dicha tarea, quiz谩s apoyarnos de integraciones con Python o que me recomiendan?

Electron te permite el desarrollo de aplicaciones de escritorio usando Node.js del lado del servidor y Chromium como interfaz

驴Cu谩l ser铆a un buen libro para reforzar lo aprendido sobre Node?

Iniciando en Platzi鈥 馃槃

Hay un modulo en NPM que solo sirve para saber si un numero es par o impar 馃ぃ馃ぃ馃憤: https://www.npmjs.com/package/is-odd

A quien mas se le paran los videos de un momento a otro? eso esta muy canson, le toca a uno recargar la pagina 馃槙

Capaz me estoy mareando pero si mongodb va de la mano con NODEJS porque una base de datos no relacionar, que no necesariamente, pero tiene como ventaja la gran capacidad de almacenar datos se maneja tan bien con nodejs, que escuche que no maneja bien los datos grandes?

Complementando a lo que dicen Juli谩n sobre utilizar _NodeJS _con **鈥淏igData鈥, **es que NodeJS no esta optimizado para trabajar tareas donde requiere uso de la CPU o GPU. Simplemente no fue creado para eso.

A ver como usamos node.js com MQTT 馃槂

Modulos que hacen una cosa, la hacen bien e interactuan, para evitar conflictos de versiones. Location!

The Node.js way鈥 Me gust贸 esa frase.

System programming (or systems programming) is the activity of programming system software.
The primary distinguishing characteristic of systems programming when compared to application programming is that application programming aims to produce software which provides services to the user (e.g. word processor),
whereas systems programming aims to produce software which provides services to the computer hardware (e.g. disk defragmenter).
It requires a greater degree of hardware awareness.

Using the Windows API directly was, at one point, a common way to write applications for Windows. So no, that鈥檚 not systems programming.

Systems programming is not just 鈥渃lose to the OS鈥 鈥 it鈥檚 something essential to the core functioning of the computer system.
So writing an OS is systems programming. Writing video drivers, filesystem drivers, network drivers for that OS is systems programming.
Writing a compiler for a particular combination of language/chipset is systems programming.

In short, The system programming when compared with application programming is that the SP handles the OS software to work with hardware resources and AP handles the end users activity.

Muy bien, aunque por la discusi贸n del Big Data entonces me habr铆a gustado ver una comparaci贸n entre las distintas formas de crear un API REST (Node js, Microsoft Net Core, Laravel, Python - Flask, Django etc etc) y as铆 reforzar para que me sirve el uso de la herramienta.

No entiendo porque pones al procesador como limitante de nodejs a la hora de manipular datos, 驴porque no ser铆a bueno para big data y porque python s铆? no me quedo claro eso. Justamente, no es entrada y salida, es algo que requiere estrictamente la cpu, y eso va ser limitaci贸n para cualquier lenguaje, porque depender谩 del hardware. 驴Porque bloquear铆a el hilo de ejecuci贸n? 驴Acaso nodejs no tiene librer铆as para manejar multihilos y permitir as铆 el multiprocesamiento? Por otro lado 驴Me dar铆as un ejemplo de proyecto al que llamas 鈥渁plicaciones de sistemas鈥?

Muy interesante

Genial

La verdad siendo que aun me queda mucho por practicar sobre JS, puedo comprender a perfecci贸n la parte te贸rica de lo presentado al momento. Muchas gracias y espero que siga as铆!

Libuv es la librer铆a encargada de las comunicaciones de red y el acceso al sistema de archivos, as铆 como gestionar el event loop.

Genial

hice el curso de programaci贸n b谩sica, es lo 煤nico que s茅 de javascript junto con otras cosas del dom, estas cosas de server.on y readFile no las he visto antes, deber铆a tomar otro curso antes de este? y cual? o esto se explicar谩 m谩s adelante en el curso? muchas gracias.

Genial

馃挭馃捇 Estoy en busca de los MEJORES DEVELOPERS de LATAM:
馃 驴Eres un Master Pro, Senior Developer en: TypeScript, Node.js, Scrapping, end-2-end browser Jira?
Queremos conocerte en: https://selectalatam.teamtailor.com/jobs/preview/477fb8a9-1a9b-45f3-926a-22356e6a0558

馃 驴Tu especialidad es: Node y MySql Tecnolog铆as secundarias: GraphQl?
Aplica ahora en: https://selectalatam.teamtailor.com/jobs/preview/8a2dea22-6f7c-4cc7-8540-7c07119bad11
馃 驴Tu gran amor es: Golang, Linux, Cloud Development, Java, C++ , JIRA?
Te esperamos en: https://selectalatam.teamtailor.com/jobs/preview/b833d966-6563-4ad0-9970-28715a4388cf

No bueno es que pueden tener mas de un lenguaje en el backend, por lo tanto pueden usar un lenguaje para BidData y Nodejs para lo demas

que es el core de node.js, para que funciona, de que se trata ? alguien que me pueda responder porfavor

Este curso me servir谩 mucho para crear un m贸dulo de monitoreo de evaluaciones en l铆nea en tiempo real, voy con toda.

D: yo no se nada de Redes, Tenemos en platzi alg煤n curso que ense帽e a fondo sobre redes ?

Julian, muy interesante todo lo que nos ense帽as de Node.js hasta ahora, una pregunta: 驴por qu茅 los textos que pones en el video est谩n en ingl茅s?
驴No ser铆a mejor ponerlos en castellano tambi茅n?
Saludos.