El problema
Tengo esta API falsa:
[{"task_id":"44","task_title":"task1"},{"task_id":"45","task_title":"task2"},{"task_id":"46","task_title":"task1"},{"task_id":"47","task_title":"task2"}]Cuando trato de acceder a él usando un método GET de búsqueda, usando el siguiente código:
function getData(){ fetch('http://localhost:5000/api/tasks') .then(res => res.json()) .then((data) => {console.log(data)});} getData();Obtengo el resultado esperado en la consola.
(4) [{…}, {…}, {…}, {…}] 0: {task_id: '44', task_title: 'task1'} 1: {task_id: '45', task_title: 'task2'} 2: {task_id: '46', task_title: 'task1'} 3: {task_id: '47', task_title: 'task2'}Sin embargo, cuando trato de acceder a él a través de un método POST, así:
function postData(){ fetch('http://localhost:5000/api/tasks',{ method: 'POST', mode: 'cors', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify({ task_title: 'testTask' }) }) .then(res =>{ return res.json() }) .then(data => console.log(data)) .catch(error => console.log('ERROR')) }Me sale este inesperado 404:
POST http://localhost:5000/api/tasks 404 (Not Found)Mi API está configurada como tal usando Node.js y express:
app.get('/api/tasks', (req, res)=>{ db.SelectAll().then(data => {res.json(data)}); })db es solo:
const db = require('./db/db.js');y SelectAll() es:
async function SelectAll() { try { const res = await client.query("SELECT * FROM tasks"); return res.rows; } catch(err){ console.log(err); } client.end(); };¿Qué está causando este 404?
app.get('/api/tasks', (req, res)=>{ db.SelectAll().then(data => {res.json(data)}); })
Su código registra un controlador GET. No ha utilizado app.post para registrar un controlador POST.
Si bien esto debería significar que una solicitud POST a esa ruta obtiene una respuesta 405 Method Not Allowed , Express no admite esto automáticamente y en su lugar da un 404 Not Found .
Si desea hacer algo cuando se realiza una solicitud POST a esa ruta, debe usar app.post para registrar una función que se ejecutará y hará lo que sea que desee hacer.