Conocer y comprender c贸mo se realizan las conexiones hacia los servidores a trav茅s de internet y sus implicaciones en el desarrollo de servidores

1

Bienvenida y presentaci贸n del curso

2

Qu茅 es Node y c贸mo instalarlo

3

驴Qu茅 son y c贸mo se usan las peticiones HTTP?

4

M茅todos, cabeceras y estados

5

Cuerpo y query de la petici贸n

Crear un servidor HTTP en Javascript, y comenzar a escuchar y responder peticiones desde un cliente .

6

Crear un servidor HTTP desde NodeJS

7

驴C贸mo pueden venir las peticiones?

8

Recibir informaci贸n desde el cliente: Body y Query

9

Informaci贸n contextual: Leer las cabeceras

10

Tipos de respuesta: Vac铆a, plana, con datos y estructurada

11

Respuestas coherentes

12

Servir archivos est谩ticos

13

Errores: C贸mo presentarlos e implicaciones en la seguridad

Comprender y desarrollar la arquitectura b谩sica de un backend en NodeJS, y comunicarse entre m贸dulos

14

Conceptualmente: Rutas, controladores y bases de datos

15

Rutas y capa de red: Responsabilidades y l铆mites

16

Controladores: Definiendo la l贸gica de negocio

17

Almacenando la informaci贸n en una base de datos

Utilizar una base de datos para definir, modelar, almacenar y recuperar la informaci贸n de nuestra aplicaci贸n

18

Tipos de Bases de Datos: Relacionales y No Relacionales

19

Crear y Configurar tu Base de Datos con MongoDB

20

MongoDB: Almacenar y leer datos

21

MongoDB: Actualizar datos

22

MongoDB: Consultar datos

23

MongoDB: Eliminar Datos

24

Gestionar conexiones a la base de datos desde la API

Uso de entidades para crear aplicaciones escalables

25

Escalando la arquitectura: M煤ltiples entidades

26

Relacionando nuestras entidades

27

C贸mo recibir ficheros desde NodeJS

28

Guardar el fichero en el servidor

Conocer el protocolo de websockets, e implementar comunicaci贸n cliente/servidor con SocketIO.

29

WebSockets: Qu茅 son, por qu茅 son interesantes y c贸mo usarlos

30

Manejo de Websockets con NodeJS

31

Conectar la API al servidor de WebSockets

Revisi贸n de lo aprendido, y pr贸ximos pasos

32

Revisi贸n y pr贸ximos pasos

33

Tips para escalar nuestro proyecto

A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

MongoDB: Eliminar Datos

23/33
Recursos

Aportes 32

Preguntas 11

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

El repo del profe!!

APORTE EXTRA
Cuando hacemos la petici贸n de eliminar por primera vez un mensaje no hay problema, pero cuando lo hacemos una segunda vez a pesar de que el mensaje ya no existe en al DB nos sigue apareciendo una respuesta SUCCESS y no una respuesta de ERROR.
Para ello hice el siguiente c贸digo:

async function existDB(id) {
    const exist = await Model.exists({
        _id:id
    });
    return exist;
}

Esto devuelve un TRUE o FALSE, lo cual es la respuesta si el mensaje existe en la DB.

El return despues del reject o del resolve no es necesario 馃槃

Tambi茅n podemos utilizar:

Model.findByIdAndDelete(id);

hay un detalle en el c贸digo y es que si intentas eliminar un dato que no existe el funcionamiento hace parecer que se elimin贸, en el caso de que se intente modificar un dato que no existe el programa se cae y la soluci贸n es un tanto simple, lo are solo para la funci贸n de eliminar pero para modificar es pr谩cticamente lo mismo, lo primero es en el archivo store.js crear esta funci贸n:

const ifExist = async (id) => {
      return await Model.exists({
            _id: id
      });
}

lo 煤nico que hace es verificar mediante id si el dato existe, y devuelve true o false, luego en la funci贸n removeMessage se tiene que verificar primero si el dato existe:

const removeMessage = async (id) => {
      const siExiste = await ifExist(id);
      if(!siExiste){
            return siExiste;
      }
      return await Model.deleteOne({
            _id: id
      });
} 

la funci贸n no cambio mucho, solo devolver谩 un false al controller en caso de que el id no exista en la BD. Como estaba el c贸digo de la funci贸n deleteMessage en controller.js aun devolviendo el false o un error con new Error() fa funci贸n deleteMessage no detecta si algo sali贸 mal por lo que tambi茅n hay que modificarla un poco:

const deleteMessage = (id) => {
      return new Promise(async (resolve,reject) => {
            if(!id){
                  reject('ID invalido');
            }
            await store.removeMessage(id)
                  .then((resultado) => {
                        if(resultado){
                              resolve();
                        }else{
                              reject('[Controller] El dato no existe en Store');
                        }
                  })
                  .catch(err => reject(err));
      });
}

con respecto al c贸digo de la clase solo agregue al then el par谩metro resultado y el if para devolver resolve o reject segun sea el caso, en consola nos dir谩 que el dato no existe en el store y al usuario solo le mostrar谩 el error que ya tenia, para el caso del patch es un fallo mas complejo por que si se intenta modificar un dato que no existe el servidor se muere, pero aqu铆 la soluci贸n:

const updateMessage = (id, message) =>{
      return new Promise(async (resolve, reject)=>{
            if(!id || !message){
                  reject('[Controller] Invalid data');
                  return false;
            }
            await store.updateText(id,message)
                  .then(resultado =>{
                        if(resultado){
                              resolve(resultado);
                        }else{
                              reject('[Controller] No se encontro el dato para actualizar');
                        }
                  });
            
      });
}

solo modifiquen la funci贸n updateText en store.js para que valide si existe el id

Me encanta como el profesor termina cada clase, parece casi que hasta planeado. Te deja como con una incertidumbre, con unas ganas muy fuertes de seguir, diciendo impl铆citamente: 鈥淰en conmigo, que apenas se est谩 poniendo bueno 馃槑馃挌鈥

Para los que le den el error de then of undefined:

async function removeMessage(id) {
  return await Model.deleteOne({
    _id: id,
  });
}

Solo es agregar Asyn/Await

En este curso aprendes mas de MongoDb que en el mismo curso de MongoDB jsjsjs

Hola Devs:
-Aca mi solucion usando TypeScript:
El Network del componente Message:

El Controller del componente Message:

El Store del componente Message:

-Aca esta el commit exacto de esta clase: Click Aqui
Recuerda, #NuncaParesDeAprender 馃挌

En un m贸dulo ya hicimos todo un CRUD con Node y Mongo 馃挌
C - Create (POST)
R - Read (GET)
U - Update (PATCH)
D - Delete (DELETE)

Ya para profundizar m谩s en Mongo definitivamente tomar su curso: https://platzi.com/cursos/mongodb/

Este curso, me volo la cabeza, aunque ojala hubiera alguna conexi贸n con un fronted para saber como conectarlo y poder bien el funcionamiento 馃槙

Como se puede eliminar m谩s de un registro?

Genial, muy emocionado.

El c贸digo versi贸n ES6+

Ruta: componente/message/network.js

router.delete('/:id',async (req,res)=>{
    const { id } = req.params;
    try {
        await deleteMessage(id);
        response.success(req,res,`Usuario ${id} elminado`,200);
    } catch (e) {
        response.error(req,res,'Error interno',500,e);
    }
})

Ruta: componente/message/controller.js

function deleteMessage(id) {
    return new Promise(async (resolve,reject)=>{
        if(!id){
            reject('Id invalido');
        }
        try {
            await store.remove(id);
            resolve();
        } catch (e) {
            reject(e);
        }
    })
}

Ruta: componente/message/store.js

async function removeMessage(id) {
    Model.deleteOne({
        _id:id
    })
    return await Model.findByIdAndDelete(id);
}

Tengo el siguiente error

[response error]TypeError: store.remove(...).then(...).cath is not a function

pero si me elimina el registro

Ya inspeccione el c贸digo completo y todo esta bien como en el v铆deo

Si quieres retornar en tu response el mensaje que fu eliminado correctamente puedes usar el query de mongoose :_ findOneAndDelete()_

Avanzando!

Buen dia companeros, alguien sabe a que se debe este error:

db] connection successful
application listening on port 3000
5e9a5b32e2cc2bf62a30d693
[Response Error from response.js]: TypeError: Cannot read property 'then' of undefined

Muy buenas las clases!!

Cuando hago el metodo DELETE, me elimina el mensaje pero luego me lanza este error en consola, alguien sabe porque.?

[response error] Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

Hay alg煤n valor que retorne el **deleteOne **para validar que el documento realmente se removi贸?

Si indic贸 un ID que no existe me retorna un mensaje que fu茅 removido.

Cuando se envia la peticion DELETE sin el ID en la url, aparece un error generado, al parecer, antes de nuestra validaci贸n en el controller.
Lo mismo pasa al no insertar ningun ID en el PATCH de la clase anterior.
La validacion de params no insertados no funciona en este caso.
驴Cual ser铆a la soluci贸n?

Hay alg煤n valor que retorne el deleteOne para validar que el documento realmente se removi贸?

Si indic贸 un ID que no existe me retorna un mensaje que fu茅 removido.

Bueno en este v铆deo encuentro una incongruencia, el teacher en el controller, en la funci贸n deleteMessage llama a remove() y en el store la funci贸n se llama removeMessage y sin embargo en la prueba le funciona, esta raro. Que paso alli???,

Esto est谩 muy genial 馃槃

Excelente avance. Node lo usare en los siguientes proyectos!!

Excelente curso, hay repositorio?, tenia un peque帽o error en store.js y solo lo pude solucionar hasta Carlos hizo un repaso de este archivo.

Tengo un error interno. Reviso el codigo y lo reviso y no veo nada diferente al de la explicacion.

Busquemos en los comentarios, ah铆 est谩 el repo del profe

Hace unas cosas muy raras:

  1. En patch metio dentro de una funcion asyncrona una Promesa
  2. Ahora mete una promesa dentro de una promesa
    LOL 馃槀

Muy interesante, me encanta 馃槂