API问题| URL带参数



我有一个问题与我的删除功能,它总是删除最后的数据,而不是所需的数据。

下面是我的API - DELETE函数:

删除数据的函数

app.delete("/api/theTasks/:id", (req, res) => {
let taskToRemove = Items.find(p => p.id == parseInt(req.params.id));
let index = Items.indexOf(taskToRemove);
Items.splice(index, 1);
res.json(taskToRemove);
});

我的猜测是没有找到任务,index最终是-1,所以你最终调用:

Items.splice(-1, 1);

删除Items的最后一个元素。

您可以通过检查项目是否被找到并仅在发现时删除它来解决此问题。

app.delete("/api/theTasks/:id", (req, res) => {
let taskToRemove = Items.find(p => p.id == parseInt(req.params.id));
if (taskToRemove) {
let index = Items.indexOf(taskToRemove);
Items.splice(index, 1);
res.json(taskToRemove);
} else {
res.status(404).json({ error: 'Item not found' });
}
});

get index = -1;接前要检查一下;或者使用过滤器

问题:

  1. find也返回undefined,如果没有找到项目。
  2. 当你搜索未定义的索引时它会返回-1
  3. 如果你将-1传递给splice,它将总是删除最后一个元素。

使用数组过滤器,

app.delete("/api/theTasks/:id", (req, res) => {
const result = Items.filter((p) => p.id === parseInt(req.params.id));
if (result.length === 0) res.status(404).json({ error: "Item not found" });
res.json(result);
});

最新更新