簡體   English   中英

對象未在 DELETE 請求中刪除

[英]Object not deleting on DELETE request

我是 node.js 的新手,試圖從 DELETE 請求中的 JSON 文件中刪除一個對象我已經編寫了這段代碼,但仍然沒有從 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}`);
})

在寫入文件之前,您似乎並未真正從汽車數組中刪除該項目。 看起來您從“err”回調中的數組中刪除了該項目,這意味着它只會在寫入失敗時刪除它。

我不確定splice(Acar,1)如果 Acar 是對象本身,而不是索引。 下面的代碼應該可以工作。


    // ...
    cars.splice(cars.indexOf(ACar, 1))
    // fs.write etc.

那是因為您沒有編寫任何代碼來將其從文件中刪除。

 const del_index = cars.findIndex(el => el.id === id);
 cars.splice(del_index, 1)

findIndex將幫助您,而不是使用 find,因為您將使用索引進行拼接,而且您還需要在將汽車保存到 json 文件之前進行拼接

如果您使用204狀態代碼,則不會響應任何內容

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}`);
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM