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

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Introducci贸n a pruebas unitarias con Ava.js

17/78
Recursos

Ava.js es un test runner que permite definir cada uno de los tests de nuestra app y soporta ECMAScript 2016.

Aportes 43

Preguntas 7

Ordenar por:

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

Para los que les fallan los tests por que no les encuentra la carpeta, ponedlo de la siguiente manera ya que ava por defecto busca la carpeta llamada tests.

"test": "DEBUG=platziverse:* ava --verbose",

Bueno aqu铆 les dejo un regal贸n, la documentaci贸n de AVA en espa帽ol espero se lo disfruten tanto como yo (que no domino tan bien el Ingl茅s hasta ahora)

en el package.json puse tests/* porque sin el * me estaba arrojando error!

"test": "DEBUG=platziverse:* ava tests/* --verbose",

A mi me corrio con el script

"DEBUG=platziverse:* ava tests/*-tests.js --verbose",

Es complejo trabajar o guiarse cuando no se especifica como aplicar algunas funciones en Win10 (en mi caso) y todo el desarrollo se basa en un solo SO, entorpece un poco el progreso en el curso ya que toca averiguar puntos b谩sicos que pueden ser compartidos ya que la gracia del desarrollo esta en crear o realizar cosas diferentes pero comando que pueden publicarse, no se esta haciendo
En mi caso sale el error de 鈥淧lease install sqlite3 package manually鈥 en SQLite y realice varios intentos y este no funciono.
Espero este curso (que lo inicie con bastante inter茅s ya que estoy en un proyecto IoT implementando varios lenguajes para mostrar y analizar informaci贸n) y los siguientes puedan mejorarlos con ese simple detalle de compartir las funciones o comandos en otros SO鈥檚 sea win o linux o el mismo Mac cuando se desarrolle en otro SO.
Esta no es una queja contra Julian ni mucho menos, Julian es un Lord y hace mucho sigo todo lo q hace pero si lo dejo como una observaci贸n para platzi mejorar en el esquema de estudio que emplea y se estipule con los profesores esa alternativa.
No se si continuar el curso ya que no puedo resolver este problema y en lo personal me desmotiva ya q no vale la pena continuar si no puedo resolver esta prueba

DEBUG=platziverse:* ava tests/* --verbose

Si alguien tiene problemas pruebe con

"test": "SET DEBUG=platziverse:* && ava tests/ --verbose"```

En Win10 para poder ejecutar el test deb铆 especificar el archivo asi

"test": "SET DEBUG=platziverse:* && ava tests/agent-tests.js --verbose"
> SET DEBUG=platziverse:* && ava tests/agent-tests.js --verbose

  鈭 MAke it pass

  1 test passed

En Win10 para poder ejecutar el test en el archivo package.json de ra铆z en la secci贸n de scripts tiene que quedar as铆.

"test": "SET DEBUG=platziverse:* && ava tests/* --verbose"```

ava me estaba dando problemas, la librer铆a tiene errores, as铆 que mejor decid铆 emplear Jest.鈥 aqu铆 les dejo el c贸digo:

'use strict'

const config = {
  logging: function () {}
}
let db = null

it('testing work setupDB', async () => {
  const setupDB = require('../')
  db = await setupDB(config) 
})

it('Agent service should exist', () => {
  expect(db.Agent).toBeTruthy()
})```

:)

馃憢
.
Les comparto el repositorio del proyecto que voy desarrollando por si alguien quiere realizar la implementaci贸n de las pruebas unitarias con Jest, all铆 pueden encontrar formas para realizarlas ya que todo el tema de stubs y mocks (estos temas los veremos m谩s adelante) camb铆a bastante.
.
https://github.com/rubbenpad/ionode
.
Nunca pares de aprender!

No termino de entender qu茅 significa

SET DEBUG=platziverse:*

el resto, fant谩stico.

Para los que siguen este curso y tiene problemas al ejecutar el test de prueba, es quiz谩 porque cambio la forma en ejecutar tests se arregla con un *:

DEBUG=platziverse:* ava tests/* --verbose

Al realizar el primer test me sale lo siguiente:

脳 Couldn鈥檛 find any files to test

0 tests passed
1 uncaught exception

npm ERR! Test failed. See above for more details.

Alguien con el mismo problema ?

Pens茅 que usar铆a Jest

Alguien tiene este error al ejecutar el test:

Rejected promise returned by test. Reason:

SyntaxError {
message: 鈥楿nexpected token function鈥,
}

Para windows este es el archivo package.json con cambios en los scripts que me funciono para poder correr las pruebas

{
  "name": "curso-node",
  "version": "1.0.0",
  "description": "Simple IOT Platform  - DB Node",
  "main": "index.js",
  "scripts": {
    "setup": "SET DEBUG=platziverse:* && node setup.js",
    "test": "SET DEBUG=platziverse:* && ava tests/ --verbose",
    "lint": "standard"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/javierelipadron/curso-node.git"
  },
  "author": "Javier Padron / Platzi",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/javierelipadron/curso-node/issues"
  },
  "homepage": "https://github.com/javierelipadron/curso-node#readme",
  "devDependencies": {
    "ava": "^0.23.0",
    "sqlite3": "^3.1.13",
    "standard": "^10.0.3"
  },
  "dependencies": {
    "chalk": "^2.3.0",
    "debug": "^3.1.0",
    "defaults": "^1.0.3",
    "inquirer": "^3.3.0",
    "pg": "^7.3.0",
    "pg-hstore": "^2.3.2",
    "sequelize": "^4.19.0"
  }
}

驴Por que al cambiar

const Sequelize = require('sequelize')

por

import Sequelize from 'sequelize'

el test me saca el siguiente error?

 Rejected promise returned by test. Reason:

  SyntaxError {
    message: 'Unexpected token import',
  }

al correr npm test el test no pasa y me genera el siguiente error:
Rejected promise returned by test. Reason:

TypeError {
message: 鈥榙ataType.types[dialect] is not iterable鈥,
}
alguien me podr铆a ayudar? gracias

Alguien sabe como se llama el theme de Visual Studio Code que utiliza en las clases? 馃槉

Saludos companeros. Cuando corro el test, al parecer todo sale bien, solo tengo una duda. Cual es el significado del mensaje que de manda al final?

edens-MacBook-Pro:platziverse-db Eden$ npm test

> platziverse-db@1.0.0 test /Users/eden/Desktop/platzi/node/platziverse/platziverse-db
> DEBUG=platziverse:* ava tests/ --verbose


Fri, 13 Apr 2018 02:45:18 GMT sequelize deprecated String based operators are now deprecated. Please use Symbol based operators for better security, read more at http://docs.sequelizejs.com/manual/tutorial/querying.html#operators at node_modules/sequelize/lib/sequelize.js:242:13
  鉁 Agent

  1 test passed

edens-MacBook-Pro:platziverse-db Eden$
Que ser铆a una base de datos en memoria? O sea a que te refer铆s con que este en memoria? Por otro lado, como devuelve el agente si no se crearon las tablas en sqlite?

Por que defino let config = { logging: function() {}}. Ya no le habia dicho a config que sino le digo su valor tome los por defaults.?

Ava corre los tests de manera asincrona. Cuando tengo los tests en varios archivos es un problema porque si hay entidades que dependan de otras las pruebas no pasan. Lo tuve que solucionar poniendo todas las pruebas en un solo archivo. Y tengo mas de 20 entidades que se relacionan entre s铆. 驴Hay alguna forma para correr archivos en serie? 驴O tengo que que escribir tests atomicos que no dependan de otros tests como dice la documentacion de ava?

para mi funcion贸 utilizando:

鈥渢est鈥: 鈥淒EBUG=platziverse:* ava tests/agent-tests.js --verbose鈥

Creo que existe un problema en windows al querer ejecutar los tests porque no encuentra los archivos para pruebas con ava tests/*

驴No podr铆a hacerse destructuring del objeto config y reemplazar directamente los elementos que queremos?, para ahorrarnos usar la dependencia defaults

Bueno este curso lo hice hace 6 meses me estanque aqu铆, no entend铆a nada, realice el curso de nodeJs con Carlos Hernandez q es mas b谩sico y ahora puedo entender mejor esta clase鈥

Estoy utilizando GitBash, corro el test as铆:

"test": "set DEBUG=TesBoard:* & ava tests/*-tests.js --verbose",

y me arroja el sig. error:

`(node:7828) UnhandledPromiseRejectionWarning: C:鈥TesBoard-db\node_modules\ava\lib\node-arguments.js:9
} catch {
^

(node:7828) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:7828) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
`

Que me recomiendan??

![](

Estoy repasando todo el codigo y lo tengo bien, pero el test a sqlite no me pasa y pone este error:

Rejected promise returned by test. Reason:

Error {
message: 鈥楶lease install sqlite3 package manually鈥,
}

No se si tengo que crear algun dato dentro de Sqlite

Si tienen alg煤n problema en win 10, intenten con esto:

"SET DEBUG=platziverse:* && ava tests/* --verbose"

Que buena explicaci贸n en el 5:34 la importancia de no hacer pruebas con la BD real si no utilizar una BD de pruebas.

sequelize soporta oracle???

Hola, estoy teniendo este error al ejecutar 鈥渘pm test鈥

Cannot find module './lib/cli'

Si tienen alg煤n problema con la instalaci贸n de sqlite3 en Windows, les dejo mi soluci贸n.

  1. Instala la ultima versi贸n de npm
npm install npm@latest -g
  1. Instalar Python 2.7 y node-gyp
npm install --global --production windows-build-tools

npm install --global node-gyp

Una vez instalado aseg煤rate de que python esta en el directorio correcto

C:\Users\TUUSUARIOAQUI.windows-build-tools\python27\python.exe

  1. (user) environment variable
    setx PYTHON 鈥%USERPROFILE%.windows-build-tools\python27\python.exe鈥

Referencia

en donde puedo consultar la forma de escribir scripts ? por ejemplo que es --verbose, es parte del uso de la terminal o de la documentaci贸n de npm?

No me queda claro el uso de defaults, ya que yo pondr铆a espec铆ficamente una config para test en el AGENT-TEST.
A menos que para no repetirla en los futuros test la pongamos en el index general, pero yo tampoco lo hubiera hecho, habr铆a creado en el directorio tests un archivo espec铆fico.
Ahora si lo voy a usar en m谩s cosas o tiene algo m谩s a futuro pensado veremos.
Escucho opiniones.

Definiendo Test Besico para verificar que AVA este funcionando adecuadamente

Como coloco el s铆mbolo en mi ubuntu bash?

No me quedo muy claro el proposito de defaults, es decir se que me va a poner los valores por defecto, pero cual ser铆a la diferencia con este ejemplo

let config = {
  ejemplo: VARIABLE_DE_ENTORNO || 'VALOR_POR_DEFECTO'
}

no entend铆 muy bien cu谩l es el proposito de

let config = {
	loggin: function () {}
}

驴Para qu茅 poner el atributo loggin a una function vacia ?