Node.js中如何捕获Got模块抛出的GotError [HTTPError] 404 (Not Found)错误
Got模块HTTPError错误捕获方案
捕获失败原因
你所使用的try catch属于同步错误捕获语法,而当前示例中got以Promise链式方式调用,异步抛出的HTTPError无法传递到外层同步try catch块,因此捕获失败,需使用异步错误对应的捕获方案。
方案1:在Promise链式调用后追加.catch方法
这是最适配你现有代码写法的处理方式,直接在then后追加catch块即可捕获所有异步抛出的错误:
const got = require('got'); got(`https://www.wrongurl.com`) .then(response => { // 执行相关业务逻辑 }) .catch(error => { // 按需判断错误类型做不同处理 if (error.name === 'HTTPError') { console.log('请求异常,响应状态码:', error.response.statusCode); } else { console.log('其他错误:', error.message); } })
方案2:搭配async/await使用try catch
如果你更习惯用try catch的写法,需要将got调用改为await形式,包裹在async函数内部:
const got = require('got'); async function fetchData() { try { const response = await got(`https://www.wrongurl.com`); // 执行相关业务逻辑 } catch (error) { if (error.name === 'HTTPError') { console.log('请求异常,响应状态码:', error.response.statusCode); } else { console.log('其他错误:', error.message); } } } fetchData();
补充提示
- HTTPError实例内置了完整的请求、响应上下文,可通过
error.request获取请求参数、error.response获取完整响应内容,方便排查问题。 - 除了HTTP请求错误外,网络不通、DNS解析失败、请求超时等场景也会抛出对应错误,建议在捕获逻辑中做好分级处理。
内容的提问来源于stack exchange,提问作者Wired Hack
相关产品推荐
相关产品推荐

