Crear con POST
Parte de la sección API REST del Journey de Node.js de Coddy. Lección 2 de 25.
Un cliente que añade una tarea necesita saber dónde se encuentra la nueva tarea. Envía el nuevo recurso a la URL de la lista con POST, y el servidor responde 201 Creado con el recurso y un encabezado Location que indica su URL.
POST /api/events { "name": "Launch party" }
201 Created
Location: /api/events/12
{ "id": 12, "name": "Launch party" }El servidor elige el id, así que dos clientes nunca pueden reclamar el mismo. Con el encabezado Location, el cliente puede obtener el nuevo evento sin construir la URL por sí mismo. res.location(path) establece ese encabezado y se encadena como res.status:
res.status(201).location(`/api/events/${event.id}`).json(event);Desafío
FácilLos clientes necesitan una forma de añadir tareas. Añade una ruta POST que cree una tarea e indique al cliente dónde se encuentra la nueva tarea.
- En
routes/tasks.js, añade una ruta paraPOST /api/tasks(dentro del enrutador, esa ruta es'/'). Leetitledel cuerpo JSON, por ejemplo{ "title": "Order new chairs" }. - Crea la nueva tarea con cuatro campos:
id: de la funciónnextId()enstore.js. Impórtala junto atasks.title: del cuerpo.done:false.createdAt:new Date().toISOString(), la hora actual como texto.
Añádela al arreglo
tasks, para queGET /api/taskstambién la muestre. - Responde con el estado 201 y la nueva tarea como JSON. Establece el encabezado
Locationen la URL propia de la tarea: para la tarea 4, es/api/tasks/4. En una ejecución nueva, el cuerpo de la respuesta se ve así (tucreatedAtserá el momento en que la envíes):{ "id": 4, "title": "Order new chairs", "done": false, "createdAt": "2026-10-30T09:12:44.512Z" } - Cuando el cuerpo no tenga
title, responde con el estado 400 y{ "error": "title is required" }, y no añadas nada a la lista.
Pruébalo: elige POST, la ruta /api/tasks y el cuerpo { "title": "Order new chairs" }. Deberías ver 201 y la tarea de arriba con id 4, y la pestaña Headers de la respuesta muestra Location: /api/tasks/4. Envía GET /api/tasks/4: recibirás la misma tarea. Después, envía POST {} a /api/tasks: recibirás 400 con el error, y GET /api/tasks seguirá mostrando 4 tareas, porque el POST rechazado no añadió nada.
Pruébalo tú mismo
import { Router } from 'express';
import { tasks } from '../store.js';
const router = Router();
router.get('/', (req, res) => {
res.json(tasks);
});
router.get('/:id', (req, res) => {
const task = tasks.find((t) => t.id === Number(req.params.id));
if (!task) {
return res.status(404).json({ error: 'Task not found' });
}
res.json(task);
});
export default router;
Todas las lecciones de API REST
1Recursos y verbos
Recursos y URLCrear con POST4Navegadores, versiones y configuración
Qué es un origenPermitir otro origenCORSUna página que llama a la APIPractica por tu cuenta: Playground de Express