Tu primera experiencia con Node.js

1

¿Dónde aprender backend con Node.js actualizado?

2

Todo lo que aprenderás sobre backend con Node.js

3

¿Qué es Node.js?

4

¿Qué es Node.js y para qué sirve?

5

Diferencias entre Node.js y JavaScript

6

Resumen: Diferencias Nodejs y Javascript

7

Instalación de Node.js

8

Arquitectura orientada a eventos

9

Node.js para la web

Manejo y uso de Streams con Node.js

10

Introducción a streams

11

Readable y Writable streams

12

Duplex y Transforms streams

Uso de utilidades de Node.js

13

Sistema operativo y sistema de archivos

14

Administrar directorios y archivos

15

Consola, utilidades y debugging

16

Clusters y procesos hijos

Crea tu primer proyecto en Express.js

17

¿Qué es Express.js y para qué sirve?

18

Creando tu primer servidor con Express.js

19

Request y Response Objects

Aprende a crear un API con REST

20

Anatomía de una API Restful

21

Estructura de una película con Moockaru

22

Implementando un CRUD en Express.js

23

Métodos idempotentes del CRUD

24

Implementando una capa de servicios

Cómo conectarse con librerías externas en Express.js

25

Creación de una BD en MongoAtlas

26

Conexión a MongoAtlas una instancia de MongoDB

27

Conexión con Robot3T y MongoDB Compass a una BD

28

Implementación de las acciones de MongoDB

29

Conexión de nuestros servicios con MongoDB

Conoce como funcionan los Middleware en Express.js

30

¿Qué es un middleware? Capa de manejo de errores usando un middleware

31

Manejo de errores asíncronos y síncronos en Express

32

Capa de validación de datos usando un middleware

33

¿Qué es Joi y Boom?

34

Implementando Boom

35

Implementando Joi

36

Probar la validación de nuestros endpoints

37

Middlewares populares en Express.js

Implementa tests en Node.js

38

Creación de tests para nuestros endpoints

39

Creación de tests para nuestros servicios

40

Creación de tests para nuestras utilidades

41

Agregando un comando para coverage

42

Debugging e inspect

Despliega tu primera aplicación en Express.js

43

Considerando las mejores prácticas para el despliegue

44

Variables de entorno, CORS y HTTPS

45

¿Cómo implementar una capa de manejo de caché?

46

¿Cómo contener tu aplicación en Docker?

47

Despliegue en Now

Conclusiones

48

¿Qué aprendiste en este curso?

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Conexión a MongoAtlas una instancia de MongoDB

26/48
Recursos

Aportes 43

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

retryWrite = true
Las escrituras recuperables permiten a los controladores MongoDB reintentar automáticamente ciertas operaciones de escritura una sola vez si encuentran errores de red, o si no pueden encontrar un primario sano en los conjuntos de réplica o clúster fragmentado.
https://docs.mongodb.com/manual/core/retryable-writes/

w=majority
_Solicita el reconocimiento de que las operaciones de escritura se han propagado al majority ( M) de los miembros con derecho a voto. La mayoría ( M) se calcula como la mayoría de todos los miembros con derecho a voto [1] , pero la operación de escritura devuelve el reconocimiento después de propagarse al número M de miembros con derecho a voto (primarios y secundarios con members[n].votesmayor que 0).

Por ejemplo, considere una réplica configurada con 3 miembros votantes, Primario-Secundario-Secundario (PSS). Para este conjunto de réplica, M es dos [1] , y la escritura debe propagarse a la primaria y una secundaria para reconocer la preocupación de escritura al cliente._
https://docs.mongodb.com/manual/reference/write-concern/

¿Donde consigo el host?

const { MongoClient, ObjectId } = require('mongodb');
const {config} = require('../config/index');

const USER = encodeURIComponent(config.DB_USER);
const PASSWORD = encodeURIComponent(config.DB_PASSWORD);
const DB_NAME = encodeURIComponent(config.DB_NAME);

const MONGO_URI = `mongodb+srv://${USER}:${PASSWORD}@${config.DB_HOST}:${config.port}/${DB_NAME}?retryWrites=true&w=majority`;

class MongoLib {
    constructor(){
        this.client = new MongoClient(MONGO_URI, {useNewUrlParser: true });
        this.db_name = DB_NAME;
    }
    connect(){
        if(MongoLib.connection){
            MongoLib.connection = new Promise((resolve, reject) => {
                this.client.connect( err => {
                    if(err){
                        reject(err);
                    }
                    console.log('conectado');
                    resolve(this.client.db(this.db_name));    
                });
            });
        }
        return MongoLib.connection;
    }
}

module.exports = MongoLib;

por si no quieres escribir

Que paquete de iconos tienes instalado para que le de un icono a los .env?

paquete lowecase donde estuviste toda mi vida…

Despues de hacer esta configuracion me gusta mas Mongoose.

entonces el archivo .env debe ir al .gitignore?

COMO HIZO PARA PONER TODAS LAS VARIABLES DE ENTORNO DE UNA SOLA, SE AUTOCOMPLETO DE FORMA AUTOMATICA (MINUTO 2:34)

Versiones recientes del paquete de mongodb hacen uso de promesas para connect. Así que se puede usar una función asíncrona:

class MongoLib {
  constructor() {
    this._client = new MongoClient(MONGO_URI, { useNewUrlParser: true });
    this._dbName = DB_NAME;
  }

  async connect() {
    if (!MongoLib.connection) {
      await this._client.connect();
      MongoLib.connection = this._client.db(this._dbName);
    }

    return MongoLib.connection;
  }
}

module.exports = MongoLib;

que sucedio con ObjectId? lo importamos pero no lo utilizamos

Porque no crear una variable de entorno con la connection string?

Vengo del pasado (unos 6 cursos atrás) y puedo decir que ya me gusta esto xd. Debo volver al pasado antes de alterar más la línea del tiempo (mi conocimiento) 😄

Patron singleton: cada vez que nos conectemos a la base no cree un nuevo cliente, mas bien si el cliente ya esta registrado y la conexión ya esta abierta usar esa misma conexión de esa manera evitamos saturar y tener fallos a futuro.

alguno sabe el theme de colores de vscode?

Recuerden revisar que el archivo .env este en su .gitignore. Si siguieron el curso de principio a fin seguramente lo tengan añadido. Pero NO deben pushear ese archivo al repositorio.

yo no se absolutamente nada de mongoDB no se que está pasando, que curso me recomiendan?

Creo que sería más limpio usar un patron repository y injectar la dependencia de mongo. Así queda desacoplado y el día de mañana se puede cambiar mongo por otro client.

Saludos.

`mongodb+srv://${USER}:${PASSWORD}@${HOST}/${NAME}?retryWrites=true&w=majority`

.env en node.js

Esta conexión no debe ser cerrada?

Muy buena alternativa de cargar la librería de Mongo

paquete para camelCase OJO esto es un marcador!

Primer acercamiento a bases de datos!! Que emoción!! 😄

¿Para qué es este trozo del código `?retryWrites=true&w=majority` ?

muy interesante la integracion con MongoDB excelente explicacion

en esta parte del curso lo estoy siguiendo con mongoose

no me sale el icono en .env y tampoco en .env.example .

Ayuda que hago?

Interesante acercamiento a MongoDb. Buena clase.

tambien es bueno utilizar mongoose…

VisualStudio Code no da colores a mis archivos

  • .env
    -.env.example
    Por que al profesor si lo hace?

En el minuto 2:50, la última coma me estaba dando problemas porque el eslint la estaba poniendo automáticamente a través del prettier. Para que no se las ponga automáticamente cuando formateen su archivo, agreguen la última línea en su archivo .prettierrc.json:
.

{
"tabWidth": 2,
"semi": true,
"singleQuote": true,
"trailingComma": "none"
}

De donde obtengo el DB_HOST?

Mongoose me parece que es más práctico y más utilizado.

Decidí usar docker para levantar mi instancia local de mongo, sin embargo no pude conectarme con la URI hasta que le quité el nombre de la base a la que me quería conectar. Me daba un error de autenticación.

Dado que le volvemos a pasar el nombre de la base, me funciona, pero ¿alguien podría explicarme por qué no funcionaba o qué implica ese cambio que hice? Esta curioso.

yo para mongo uso mongoose :3

Traté de anotar bien esta clase.
Les dejo un artículo para conocer el Singleton Pattern

/*
  Trabajando con mongoDB
*/
const { MongoClient, ObjectId } = require('mongodb');
const { config } = require('../config/index');

/*
  EncodeURIComponent lo que hace es manejar los caracteres
  especiales de una cadena o url.
*/
const USER = encodeURIComponent(config.dbUser);
const PASSWORD = encodeURIComponent(config.dbPassword);
const DB_NAME = encodeURIComponent(config.dbName);

/*
  Conexion a la base de datos mongo
*/
const MONGO_URI = `mongodb+srv://${USER}:${PASSWORD}@${config.dbHost}:${config.dbPort}/${DB_NAME}?retryrites=true&w=majority`;

/*
  Usar la libreria de mongo
*/
class MongoLib {
  constructor(){
    this.client = new MongoClient(MONGO_URI, {useNewUrlParser:true});
    this.dbName = DB_NAME;
  }

  connect(){
    if(!MongoLib.connection){
      MongoLib.connection = new Promise((resolve, reject) => {
        this.client.connect(error => {
          if(error){
            reject(error);
          }
          console.log('Conexion exitosa a mongoDB');
          resolve(this.client.db(this.dbName));
        });
      });
    }

    return MongoLib.connection;
  }
}

module.exports = MongoLib;```

BUENARDIUM GIGACHAD!

hola amigos, por si algun otro estudiante le pasa como a mi y no tiene del todo claro el concepto de URI, aqui les dejo un articulo que me fue de mucha ayuda para esclarecer todas mis dudas sobre URL, URI, URN y sus diferencias:
https://obelearningservices.com/url-uri-y-urn-explicacion-y-diferencias/

Mongoose parece ser más práctico y más utilizado.