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

No tienes acceso a esta clase

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

MongoDB: Eliminar Datos

23/33
Recursos

Aportes 34

Preguntas 12

Ordenar por:

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

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: “Ven 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

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/

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 💚

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.

Excelente, de verdad que éste profe explica muy bien.

No me queda muy claro la razón por la que en los controllers se crea un new Promise y dentro de este se resuelve o se rechazan las promesas del store, las funciones del store son async y el valor retornado ya es una promesa, se envuelve una promesa dentro de otra promesa y creo que esto no es necesario se puede trabajar directamente con la promesa retornada por las funciones del store a menos que el valor retornado por estas funciones no sea una promesa, en ese caso creo que esta perfecto que el valor se envuelva en una promesa.

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

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.

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 😃