javascript - Node : route try to send response two times - ERR_HTTP_HEADERS_SENT ('set' ); error

标签 javascript node.js express

我有一个 API 端点,用户可以在其中指定他想要删除的集合的 ID。路由器读取 json 文件,迭代集合并删除找到的记录:

router.delete('/todos/:id', (req,res)=>{
    const id = req.params.id
    fs.readFile('todos.json', 'utf8', (err,data) =>{
        if (err) throw err
        const JSONdata = JSON.parse(data)

        JSONdata.todos.forEach((todo, index)=>{
            if(todo.id == id){
                JSONdata.todos.splice(index,1)
                fs.writeFile('todos.json',JSON.stringify(JSONdata), 'utf8', (err) =>{
                    if (err) throw err
                    return res.json({"deleted" : true})
                })
            }
        })
    })
    res.status(404).json({errors: ['task not found']})
})

但是,我收到此错误,而不是正确的响应 {"deleted": true}:

Server is running on port 3000 _http_outgoing.js:470 throw new ERR_HTTP_HEADERS_SENT('set'); ^

Error [ERR_HTTP_HEADER

我知道这与 Node 的异步性质有关。但我确信添加 return 关键字 if 循环找到特定记录将使其工作。我该如何修复它?

最佳答案

开玩笑一点改变:

router.delete('/todos/:id', (req,res)=>{
    const id = req.params.id
    fs.readFile('todos.json', 'utf8', (err,data) =>{
        if (err) throw err
        const JSONdata = JSON.parse(data)

        JSONdata.todos.forEach((todo, index)=>{
            if(todo.id == id){
                JSONdata.todos.splice(index,1)
                fs.writeFile('todos.json',JSON.stringify(JSONdata), 'utf8', (err) =>{
                    if (err) throw err
                    return res.json({"deleted" : true})
                })
            }
        })
        return res.status(404).json({errors: ['task not found']})
    })
})

关于javascript - Node : route try to send response two times - ERR_HTTP_HEADERS_SENT ('set' ); error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61047266/

相关文章:

javascript - node.js,获取问题

express - Nodemailer 传输创建推荐

javascript - 如何在前端显示响应数据?

javascript - 为什么JavaScript代码在for循环后停止执行

javascript - angular js中textArea的2路绑定(bind)

javascript - 使用自定义标记更改传单默认标记

javascript - Node.js Twitter API 游标

javascript - 使用外部托管脚本和本地托管脚本之间是否存在速度差异?

node.js - 如何使用nodejs将csv数据插入mongodb

javascript - 使用 socket node.js 检测用户切换页面