nodejs - 检查获取响应是 json 还是文本

nodejs - check if fetch response is json or text

我是编码新手,我正在使用 node-fetch 并尝试检查响应是 json 还是 text,但如果响应是文字.

如果响应是 json,它会正常工作,但如果响应是文本,我会收到错误消息。

我得到的错误:

invalid json response body at https://url.com/api reason: Unexpected token i in JSON at position 6

我的代码:

const fetch = require("node-fetch");

const doFetch = async (url) => {
  try {
    let res = await fetch(url);

    try {
      return res.json();
    } catch (error) {
      return res.text();
    }
    
  } catch (error) {
    console.log('fetch error', error.message);
  }
}

您可以检查 header 中的内容类型:

const contentType = response.headers.get("content-type");

如果是 "application/json" 则使用 json() 方法。否则,如果它是 "text/plain",请使用 text() 方法。

首先:问对问题

错误被抛出是因为您尝试将响应内容读取为 JSON 并且显然它不是有效的 JSON 格式的字符串。

在这种情况下,请尝试在要求将内容转换为 JSON 对象之前使用 Response。您应该能够读取响应状态代码或打印原始内容。

所以正确的问题不是“我怎么知道我收到短信或 JSON?”因为你应该对 server/API 说你想要什么。

正确的问题可能是“如果响应不包含有效的 JSON,它是什么?”。

我的理论

我假设您正在向 https://url.com/api URL 发送请求。目标端点可能需要一个缺少的参数(URL 来缩短)。

如果您打印响应的原始内容,您应该会看到一条包含“无效”一词的消息。这就是它说“位置 6 JSON 中的意外标记 i”的原因。

我个人会使用响应状态代码来确定我是否收到错误消息(不在 JSON 中)或我请求的内容(在 JSON 中)。

恭喜!

您是编码新手,并且已经处理了应用程序中的一小段代码可能引发的所有类型的错误。你在良好的轨道上。继续加油!