You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅通过ID删除独立JSON文件元素?Node.js todo删除接口问题

问题原因及修复方案

1. 路由不匹配报错

你代码中定义的DELETE路由是/todo/:id/delete,但Postman请求的路径是/todos/3/delete,todo和复数形式todos的拼写差异是触发Cannot DELETE报错的直接原因。

2. 功能逻辑错误修正

你的现有代码还存在两个功能问题:

  • 仅将对应条目的complete状态修改为true,没有真正删除待办条目
  • 不存在JSON.delete这个内置API,JSON序列化只能使用JSON.stringify

修复后完整代码

const fs = require('fs')
// 路由修改为/todos/:id/delete,和你Postman请求的路径保持一致
app.delete('/todos/:id/delete', (request, response) => {
    const id = request.params.id

    const findTodobyID = (todos, id) => {
        for(let i = 0; i < todos.length; i++){
            if(todos[i].id === parseInt(id)){
                return i 
            }
        }
        return -1
    }  
    fs.readFile('./store/todos.json', 'utf-8', (err, data) => {
        if(err) {
            return response.status(500).send('Sorry, something went wrong.')
        }

        let todos = JSON.parse(data)
        const todoIndex = findTodobyID(todos, id)

        if (todoIndex === -1) {
            return response.status(404).send('Sorry, ID not found')
        }

        // 用splice方法删除对应下标的待办条目
        todos.splice(todoIndex, 1)

        // 用JSON.stringify序列化数组后写入文件
        fs.writeFile('./store/todos.json', JSON.stringify(todos), (err) => {
            if(err) {
                return response.status(500).send('删除数据写入失败')
            }
            return response.json({'status': 'Deleted ID ' + id})
        })
    })
})

验证注意事项

  • Postman请求方法必须选择DELETE,路径和代码定义的路由完全匹配
  • 确保./store/todos.json文件对当前服务进程开放读写权限

内容的提问来源于stack exchange,提问作者V V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:27:03