gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:55:59 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com