Soy principiante y trato de hacer una función findByID con el archivo NodeJS y JSON como una base de datos sin marcos, código:
const http = require("http"); const url = require("url"); const fs = require("fs"); const querystring = require("querystring"); const data = fs.readFileSync("./data/data.json"); let todos = JSON.parse(data); const server = http.createServer((req, res) => { const urlparse = url.parse(req.url, true); if (urlparse.pathname == "/todos" && req.method == "GET") { const search = urlparse.search; if (search) { const [, query] = urlparse.search.split("?"); const data = querystring.parse(query); todos = todos.filter((todo) => todo.id === data.id); res.end(JSON.stringify(todos, null, 2)); } }})
Cuando consulté con el cartero por primera vez, todo estaba bien. 1ra solicitud
Cuando reviso la segunda vez en la ventana de respuesta, hay una matriz vacía. 2da solicitud
Cada solicitud utilizó una identificación diferente.
No veo todos definidos, así que asumo que es global, esta línea la está mutando en cada solicitud:
todos = todos.filter((todo) => todo.id === data.id);
Otra cosa es que si la identificación es única, puede usar todos.find
para obtener la primera coincidencia.
Entonces, en su lugar, use una nueva variable y encuentre:
const todoMatch = todos.find((todo) => todo.id === data.id);