Soy nuevo en node.js tratando de eliminar un objeto de un archivo JSON en la solicitud DELETE. He escrito este código, pero aún así, el objeto no se elimina del archivo JSON.
const express = require('express'); const fs = require('fs'); const app = express(); app.use(express.json()); const cars = JSON.parse(fs.readFileSync(`${__dirname}/Data/cars.json`)) const deleteCar = (req, res)=>{ const id = req.params.id * 1 let Acar = cars.find(el => el.id === id); if(!Acar){ return res.status(404).json({ status : "failed", message : "request not found" }) } fs.writeFile(`${__dirname}/Data/cars.json`, JSON.stringify(cars), err=>{ res.status(204).json({ status : "success", data : { car : cars.splice(Acar, 1) } }) }) }; app.delete('/api/v1/cars/:id', deleteCar) const port = 2000 app.listen(port, ()=>{ console.log(`listening at port ${port}`); })Esto se debe a que no se le ha escrito ningún código para eliminarlo del archivo.
const del_index = cars.findIndex(el => el.id === id); cars.splice(del_index, 1)Parece que en realidad no elimina el elemento de la matriz de automóviles antes de escribir el archivo. Parece que eliminó el elemento de la matriz dentro de la devolución de llamada "err", lo que significa que solo lo eliminará cuando falle la escritura.
No estoy seguro de que el splice(Acar,1) si Acar es el objeto en sí, no el índice. El siguiente código debería funcionar.
// ... cars.splice(cars.indexOf(ACar, 1)) // fs.write etc.en lugar de usar find, findIndex lo ayudaría ya que va a empalmar usando el índice, también necesita hacer el empalme antes de guardar los autos en el archivo json
si usa el código de estado 204 , no se responderá ningún contenido
const express = require('express'); const fs = require('fs'); const app = express(); app.use(express.json()); const cars = JSON.parse(fs.readFileSync(`${__dirname}/Data/cars.json`)) const deleteCar = (req, res) => { const id = req.params.id * 1 let car_index = cars.findIndex(el => el.id === id); if (car_index === -1) { return res.status(404).json({ status: "failed", message: "request not found" }) } cars.splice(car_index, 1) fs.writeFile(`${__dirname}/Data/cars.json`, JSON.stringify(cars), err => { res.status(204).json(cars) }) }; app.delete('/api/v1/cars/:id', deleteCar) const port = 2000 app.listen(port, () => { console.log(`listening at port ${port}`); })