Un CRUD completo suele ser el núcleo de una API: crear, leer, actualizar y borrar. Aquí el objetivo es hacerlo limpio: rutas claras, estados HTTP correctos y errores controlados.
1) Endpoints típicos
GET /events→ listarGET /events/:id→ detallePOST /events→ crearPUT /events/:id→ reemplazarPATCH /events/:id→ actualizar parcialDELETE /events/:id→ borrar
2) Router separado
const express = require("express");
const router = express.Router();
const Event = require("../models/Event");
router.get("/", async (req, res) => {
const items = await Event.find().sort({ date: 1 });
res.json(items);
});
router.get("/:id", async (req, res) => {
const item = await Event.findById(req.params.id);
if (!item) return res.status(404).json({ error: "No encontrado" });
res.json(item);
});
router.post("/", async (req, res) => {
if (!req.body.title || !req.body.date) {
return res.status(400).json({ error: "title y date son obligatorios" });
}
const created = await Event.create(req.body);
res.status(201).json(created);
});
router.patch("/:id", async (req, res) => {
const updated = await Event.findByIdAndUpdate(
req.params.id,
req.body,
{ new: true, runValidators: true }
);
if (!updated) return res.status(404).json({ error: "No encontrado" });
res.json(updated);
});
router.delete("/:id", async (req, res) => {
const deleted = await Event.findByIdAndDelete(req.params.id);
if (!deleted) return res.status(404).json({ error: "No encontrado" });
res.status(204).send();
});
module.exports = router;
3) Montar el router
app.use("/events", require("./routes/events"));
4) Errores y estados
- 201 al crear
- 404 si no existe el recurso
- 400 si falta información
- 204 al borrar (sin body)
