TypeError:res.json 不是函数(无法获取数据)

Posted

技术标签:

【中文标题】TypeError:res.json 不是函数(无法获取数据)【英文标题】:TypeError: res.json is not a function (not able to get fetch data) 【发布时间】:2022-01-01 15:10:20 【问题描述】:

我正在尝试使用 fetch API 获取响应,而不是陷入错误,如下所述。这是我的代码

const DefaultLayout = () => 
      let history = useHistory()
      const callHomePage = async () => 
        try 
          const res = fetch('http://localhost:4000/api/authenticate', 
            method: 'GET',
            headers: 
              Accept: 'application/json',
              'Content-type': 'application/json',
            ,
            credentials: 'include',
          )
          console.log(res)
          const data = await res.json()
          console.log(data)
          if (!res.status === 200) 
            const error = new Error(res.error)
            throw error
          
         catch (err) 
          console.log(err)
          history.push('login')
        
    

错误: TypeError:res.json 不是函数 承诺 显示待处理

【问题讨论】:

您需要await in const res = await fetch(...) 【参考方案1】:

你需要awaitfetch语句,然后调用响应的.json方法。

const res = await fetch(...)

data = await res.json();

阅读更多:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

【讨论】:

data = await res.json() 将是必需的。见developer.mozilla.org/en-US/docs/Web/API/Response/json。【参考方案2】:
const DefaultLayout = () => 
  let history = useHistory()
  const callHomePage = async () => 
    try 
      const res = await fetch('http://localhost:4000/api/authenticate', 
        method: 'GET',
        headers: 
          Accept: 'application/json',
          'Content-type': 'application/json',
        ,
        credentials: 'include',
      )
      console.log(res)
      const data = await res.json()
      console.log(data)
      if (!res.status === 200) 
        const error = new Error(res.error)
        throw error
      
     catch (err) 
      console.log(err)
      history.push('login')
    

【讨论】:

我认为没有必要等待res.json,因为它不是一个承诺。 res.json() 是一种返回承诺的方法。因此,您必须等待 JSON 数据。 哦,好的。这是有道理的。

以上是关于TypeError:res.json 不是函数(无法获取数据)的主要内容,如果未能解决你的问题,请参考以下文章

错误:.map() 不是函数 [重复]

TypeError:不是构造函数

TypeError: Object(...) 不是函数(匿名函数)

TypeError:Ajv 不是构造函数

TypeError: jQueryxxxxxx 不是函数

TypeError: $(...).on 不是函数