对象未在 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}`);
})
在写入文件之前,您似乎并没有真正从汽车数组中删除该项目。看起来你在“错误”回调中从数组中删除了项目,这意味着它只会在写入失败时删除它。
我不确定 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 会帮助你,因为你要使用索引拼接,而且你需要在将汽车保存到 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}`);
})
我是 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}`);
})
在写入文件之前,您似乎并没有真正从汽车数组中删除该项目。看起来你在“错误”回调中从数组中删除了项目,这意味着它只会在写入失败时删除它。
我不确定 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 会帮助你,因为你要使用索引拼接,而且你需要在将汽车保存到 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}`);
})