我正在尝试找出处理潜在的不良Fetch响应的正确方法。如果Fetch响应不正确,我想立即发送500响应并停止执行其余代码。但是,如果响应正常,我想继续执行程序并在最后发送响应。我的代码确实目前可以正常运行,但是我得到了
UnhandledPromiseRejectionWarning:错误[ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头。
我认为这是因为程序在catch块之后继续执行并尝试发送第二个响应。同样,该代码可以正常工作,但这显然不是正确的方法。发送catch块中的响应后,有什么方法可以使程序停止执行?
app.get('/route', async function(req, res){
try{
let response = await fetch('https://www.google.com/NonExistantPage')
if(!response.ok)
throw new Error("err")
}catch{
res.status(500).end()
}
/*
Program continues if fetch was successful
*/
res.send("data")
})
答案 0 :(得分:1)
即使在捕获res.send("data")
中发生错误时,它也会设置响应,您的代码仍在尝试调用res.status(500).end()
。如下所示,在catch中设置响应标头后,尝试返回响应以中断最终响应的执行
app.get('/route', async function(req, res){
try{
let response = await fetch('https://www.google.com/NonExistantPage')
if(!response.ok)
throw new Error("err")
}catch{
return res.status(500).end()
}
/*
Program continues if fetch was successful
*/
return res.send("data")
})