在捕获块中有条件地发送响应

时间:2020-07-31 16:05:41

标签: javascript node.js express

我正在尝试找出处理潜在的不良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")
    
})

1 个答案:

答案 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")
    
})