当Got包因无效JSON崩溃时,如何获取响应文本?
Got获取错误响应文本的解决方法
方法一:从错误对象中提取响应文本
Got抛出的JSON解析错误(比如Unexpected token < in JSON at position 0)中,若错误来自服务器返回的响应问题,错误对象会附带response属性,其中的body字段就是未解析的原始响应文本。你可以在catch块中判断后获取:
import got from "got"; try { await got('https://google.com').json(); } catch (e) { // 先判断是否存在响应对象,排除无响应的网络错误 if (e.response) { console.log("错误响应内容:", e.response.body); } else { console.log("网络异常:", e); } }
方法二:先获取原始响应再手动解析JSON
如果API返回格式不稳定,更稳妥的方式是先获取原始文本,再自行尝试解析JSON。这样无论解析成功与否,都能拿到完整的响应内容:
import got from "got"; // 先获取原始文本响应 const rawResponse = await got('https://google.com').text(); try { const jsonData = JSON.parse(rawResponse); // 处理正常的JSON数据 } catch (parseErr) { console.log("JSON解析失败,原始响应:", rawResponse); }
补充说明
- Got的错误对象中,
response属性仅在服务器返回HTTP响应(哪怕状态码是4xx/5xx)时存在;如果是DNS解析失败、连接超时这类网络错误,不会有response,所以需要先做判断避免报错。 - 除了
body,e.response还包含状态码、响应头等信息,你可以根据需求获取e.response.statusCode、e.response.headers等内容。
内容的提问来源于stack exchange,提问作者eeeeeeeeeeeeeeeeeeeeeeeeeeeeee
相关产品推荐
相关产品推荐

