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

Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Implementación de script de inicialización de base de datos

15/78
Recursos

Cuando ejecutemos el proyecto por primera vez necesitaremos tener creada la base de datos, y crear un usuario con permisos para alimentar esa base de datos.

Aportes 34

Preguntas 12

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Para los usuarios de windows que anden por aquí les dejo mi experiencia.
Al correr :

npm run setup

con el código tal cual lo tiene el profesor les dará error.
hay dos rutas, usar set para crear una variable de entorno en el cmd desde el script del archivo.json:

"scripts": {
	...
	"setup": "set DEBUG=platziverse:* node setup.js"
}

O descargar cross-env con un:

npm i cross-env --save

Cabe resaltar que esta es la mejor práctica entre las dos opciones que les traigo, ya que este es un modo de hacer que tu env sea válido en todos los sistemas operativos
y así quedaría:

"scripts": {
	...
	"setup": "cross-env DEBUG=platziverse:* node setup.js"
}

Para los que tengan problemas en windows con el comando npm run setup usen el siguiente scripts:

"scripts": { "setup": "@powershell $env:DEBUG='platziverse:*';node setup.js" }

++Para los que usamos Linux - Ubuntu. ++
Para poder entrar a postgres es de la siguiente forma:
sudo -u postgres psql

pueden configurar el puerto de posgres desde el config

Hola Gente! Estuve buceando un rato para poder solucionar el problema acerca del comando psql no encontrado en Windows (sí, momentaneamente estoy en Windows), y lo pude solucionar de la siguiente forma:

En la instalación de PostgreSQL viene una terminal incluída (la encuentran buscando simplemente en inicio). Abrí la misma, dejé las opciones por defecto como aparecían apretando enter, al momento de colocar la contraseña puse la que configuramos al momento de la instalación, y finalmente pude acceder a la base de datos por esta consola.

Espero sea de ayuda!
Saludos

para los de windows a mi me funcionó agregando en el script del package JSON la siguiente linea

"scripts": { ++"setup":"set DEBUG=platziverse:*&&node setup.js",++ "lint": "standard" },

Recuerden prender su base de datos con

brew services start postgresql

😅 Olvidé el password de Postgres

Tengo un problema al momento de ejecutar npm run setup, y es que me da como resultado solamente el success del console.log pero no me genera las tablas.

PS C:\Users\david\platzi\platziverse\platziverse-db> npm run setup

> [email protected] setup C:\Users\david\platzi\platziverse\platziverse-db
>  SET DEBUG=platziverse:* && node setup.js

Success!
PS C:\Users\david\platzi\platziverse\platziverse-db>

para ingresar en linux se necesita tener corriendo el servicio de posgres e ingresa con

sudo su - postgres

y luego

psql```

ya con esto ingresamos

para usuarios de window, a la fecha 01/2021 tuve que instalar la dependencia win-node-env para poder ejecutar el script npm run setup

npm i win-node-env -S

¡Hola!
Si alguien tiene el problema de que Sequelize no esta creando el schema con el método Sync (Es decir, que no les muestra nada en consola) es debido a que al parecer en una actualización de Sequelize, el método Sync retorna una promesa, y hay que resolverla para lograr Debuggear este contenido, la rección sería en:

index.js

    if(conf.setup){
	//Aquí se añade el await para resolver la promesa. 
        await sequelize.sync({ force: true});
    }
   ...

hola alguien me puede ayudar al momento de ejecutar el setup me sale esto

 [email protected]1.0.0 setup /home/mrrobot/Documents/Node/platziverse/platziverse-db
> DEBUG=platziverse:* node setup.js

internal/modules/cjs/loader.js:800
    throw err;
    ^

Error: Cannot find module './lib'
Require stack:
- /home/mrrobot/Documents/Node/platziverse/platziverse-db/index.js
- /home/mrrobot/Documents/Node/platziverse/platziverse-db/setup.js

Si tienen problemas con la base de datos o no quireen instalar en local, pueden usar Docker. A través de un archivo llamado docker-compose.yaml en la raíz de su proyecto:

version: "3"
services:
  db:
    image: postgres
    ports:
      - 5432:5432
    environment:
      POSTGRES_USER: platzi
      POSTGRES_PASSWORD: platzi
      POSTGRES_DB: platziverse
    volumes:
      - ./postgres-data:/var/lib/postgres

Asegurense de crear la carpeta postgres-data.
Y para levantar el contenedor con la base de datos, ejecuten:
docker-compose up -d

Y para apagar el contenedor:
docker-compose down

Para los que estén usando la sintaxis de import/export la parte de implementar debug se hace asi:

import Debug from "debug";
const debug = Debug('platziverse:db:setup')
debug()

con el comando setup en el package.json

    "setup": "DEBUG=platziverse:* node setup.js"

Si no estas usando la sintaxis import/export pero quieres habilitarla, te tengo buenas noticias. ya no se hace como antes con babel, ES SUPER FACIL y basta con agregar esto en el package.json:

  "type": "module",

Hay algunas consideraciones como que cuando importes un modulo propio a fuerza tienes que terminar los archivos con la extension pero fuera de eso, nomas!

#NuncaParesDeAprender💚

Vi que hay mucha gente que no le genera las tablas, solo la base de datos. Eso es debido a que la función de sync no tiene un await. y está generando el exit de setup antes de que se el sync terminé de ejecutarse

Muy bueno el curso!

Para aquellos que estén trabajando el curso en Windows, aconsejo usar directamente el subsistema de linux para la gestión de dependencias y en caso de tener algún inconveniente con el comando de psql, basta con añadirlo como una variable de entorno.
Saludos!

en caso tal de que en ubuntu les salga “psql: FATAL: role “root” does not exist” cuando ejecutan el comando “psql postgres”… ejecuten el siguiente comando “sudo -u postgres -i”

Bueno tuve miles de problemas con postgres en windows , ya que siempre me decia que mi clave de usuari era incorrecta asi se haya ingresado correctamente, bueno… en fin use mysql, y funciona igual perfectamente solo tienen que instalar “mysql2”: “^1.6.5”,

Para los que utilizan ubuntu o cualquier distro basada en debian les comparto este enlace para instalar postgresql en caso de que tengan errores: https://launchschool.com/blog/how-to-install-postgres-for-linux

Para los que están utilizando MySQL2 como el banco de datos, muy probabelmente van a recibir un error como esto:

Client does not support authentication protocol requested by server; consider upgrading MySQL client
SequelizeConnectionError: Client does not support authentication protocol requested by server; consider upgrading MySQL client

entonces, dentro de MySQL, para definir las permisiones de usuario y la contraseña, utilize:

alter user ‘platzi’@‘localhost’ identified with mysql_native_password by ‘platzi’;

Lo importante acá es lá palabra clave “mysql_native_password”

Buena tarde a todos a alguien mas les aparece el siguiente error

PS C:\Users\david\platzi\platziverse\platziverse-db> npm run lint -- --fix

> [email protected] lint C:\Users\david\platzi\platziverse\platziverse-db
> standard "--fix"

standard: Use JavaScript Standard Style (https://standardjs.com)
  C:\Users\david\platzi\platziverse\platziverse-db\index.js:8:35: 'consfig' is not defined.
  C:\Users\david\platzi\platziverse\platziverse-db\lib\db.js:3:7: 'Sequelize' is assigned a value but never used.
  C:\Users\david\platzi\platziverse\platziverse-db\lib\db.js:6:1: 'mosule' is not defined.
  C:\Users\david\platzi\platziverse\platziverse-db\lib\db.js:8:21: A constructor name should not start with a lowercase letter.
  C:\Users\david\platzi\platziverse\platziverse-db\lib\db.js:8:31: 'config' is not defined.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] lint: `standard "--fix"`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] lint script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\david\AppData\Roaming\npm-cache\_logs\2018-11-24T02_51_37_150Z-debug.log
PS C:\Users\david\platzi\platziverse\platziverse-db>```

alguien que me ayude

me da el siguiente problema al ejecutar npm run setup

role "platzi" is not permitted to log in

alguien me puede ayudar me sale esto y nose como arreglarlo

 npm run setup

> [email protected]1.0.0 setup /home/paul/Documents/PROYECTOS/platziverse/platziverse-db
> DEBUG=platziverse:* node setup.js

internal/modules/cjs/loader.js:638
    throw err;
    ^

Error: Cannot find module 'sequelize'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
    at Function.Module._load (internal/modules/cjs/loader.js:562:25)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.<anonymous> (/home/paul/Documents/PROYECTOS/platziverse/platziverse-db/lib/db.js:3:19)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected]1.0.0 setup: `DEBUG=platziverse:* node setup.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected]1.0.0 setup script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/paul/.npm/_logs/2019-10-28T05_59_55_016Z-debug.log

Bueno lo hice con MySql, instale npm install --save mysql2 y si instalo perfecto…

Configuración de usuario para db y creación de la db

Si alguien tiene algún problema para ver en su consola el resultado del debug:

PS E:\Git\platziverse\plaziverse-db> node setup.js Success!

Se resuelve configurando la variable de entorno en powershell:

PS E:\Git\platziverse\plaziverse-db> $env:DEBUG = "*,-not_this"

esto habilta

debug no me muestra el debug en la consola no se que estoy haciendo mal.

Saben si puedo acceder a postgres con un tipo phpmyadmin para mysql

Hola soy nuevo en Nodejs, alguien podría ayudarme con este error ?

¿Alguién podría profundizar un poco más en el uso de la variable de entorno DEBUG? que significca platziverse:db:setup?

Para alguien utilizando windows como yo, con un emulador de consola como HYPER o Terminus corriendo GIT BASH, para ver el debug simplemente antes de correr “node setup”, le mandamos lo siguiente:

DEBUG=* node setup