Crear, editar y eliminar
Clase 15 de 27 • Curso de Backend con Node.js: API REST con Express.js
Resumen
¿Cómo implementar servicios CRUD en una aplicación?
Desarrollar aplicaciones que administren datos de manera efectiva requiere implementar operaciones CRUD (Create, Read, Update, Delete). Hoy cubriré cómo hacerlo mediante una capa de servicios que aproveche la persistencia en memoria, lo cual es un enfoque sencillo pero crucial para aprender cómo funcionan estos servicios.
¿Cómo crear un nuevo producto?
El primer paso para manejar un servicio de creación es recibir la información que se quiere persistir. Esta información viene usualmente de un cliente que emplea herramientas como Insomnia o una aplicación frontend. Aquí te muestro cómo se podría implementar esto en un controlador JavaScript:
// Crear un nuevo producto
const createProduct = (data) => {
const newProduct = {
id: generateRandomID(),
...data // Información del cliente: nombre, precio, imagen
};
productsArray.push(newProduct);
return newProduct;
};
// Simulación de un endpoint de creación
app.post('/products', (req, res) => {
const newProduct = productService.create(req.body);
res.json(newProduct);
});
Gracias a esto, una vez que se crea el producto, obtendrás también un ID generado automáticamente que lo identifica de forma única en tu array de productos en memoria.
¿Cómo actualizamos un producto existente?
¡Ahora es hora de actualizar! Recibimos el ID del producto a modificar y los nuevos datos para aplicar los cambios. Usamos findIndex
para localizar el producto en nuestro array:
// Actualizar un producto
const updateProduct = (id, changes) => {
const index = productsArray.findIndex(product => product.id === id);
if (index === -1) throw new Error('Product not found');
productsArray[index] = {
...productsArray[index],
...changes
};
return productsArray[index];
};
// Simulación de un endpoint de actualización
app.patch('/products/:id', (req, res) => {
try {
const updatedProduct = productService.update(req.params.id, req.body);
res.json(updatedProduct);
} catch (error) {
res.status(404).send(error.message);
}
});
Usa el operador de propagación para conservar los datos existentes y aplicar los nuevos sin perder características del producto que no hayan sido modificadas.
¿Cómo eliminar un producto?
Eliminar un producto es completamente sencillo. Necesitamos el ID del producto que deseamos eliminar. Usamos splice
para eliminarlo de nuestra memoria:
// Eliminar un producto
const deleteProduct = (id) => {
const index = productsArray.findIndex(product => product.id === id);
if (index === -1) throw new Error('Product not found');
productsArray.splice(index, 1);
};
// Simulación de un endpoint de eliminación
app.delete('/products/:id', (req, res) => {
try {
const id = req.params.id;
productService.delete(id);
res.json({ message: `Product with ID ${id} was successfully deleted.` });
} catch (error) {
res.status(404).send(error.message);
}
});
En caso de que el producto no exista, lanzamos un error que debemos manejar adecuadamente para informar al usuario final. Esto es importante para una buena experiencia de usuario.
Cierra el ciclo: prueba tu servicio
Al terminar, es vital probar nuestros endpoints CRUD para asegurar que todo funcione correctamente desde distintas aplicaciones, como Insomnia. Aquí puedes interactuar directamente con los datos y verificar que las operaciones CRUD se ejecutan como esperas.
Implementar una capa de servicios utilizando persistencia en memoria es un excelente primer paso para entender cómo estructurar y organizar operaciones básicas pero esenciales de cualquier aplicación web. Además, recordar manejar adecuadamente los errores te prepara para situaciones imprevisibles, mejorando la robustez de tu aplicación. ¡Sigue experimentando y creando!