反应获取呼叫状态无内容

时间:2019-04-15 15:00:41

标签: javascript reactjs fetch

我尝试过这段代码:

fetch("http://localhost:5000/api/signin", {
  method: "post",
  headers: {
    "Content-Type": "application/json",
    Authorization: "this-can-be-anything"
  },
  body: JSON.stringify({
    email: this.state.email,
    password: this.state.password
  })
})
  .then(response => {
    console.log(response);
    response.json();
  })
  .then(data => {
    console.log(data);
  });

这是一种尝试,看一切是否都很好,如果我尝试让Postman打电话给http://localhost:5000/api/signin,那么一切都可以正常工作,但是在这里我什么也得不到。我在“网络”选项卡上打了一个电话,向我获取了我想要的数据,然后从该行中我将其称为状态为204的提取。

没有内容,为什么?

3 个答案:

答案 0 :(得分:1)

您没有返回response.json()返回的promise,因此您的promise链断开了,并且undefined被作为最后一个函数的参数。

添加return关键字,它将按预期运行。

fetch("http://localhost:5000/api/signin", {
  method: "post",
  headers: {
    "Content-Type": "application/json",
    Authorization: "this-can-be-anything"
  },
  body: JSON.stringify({
    email: this.state.email,
    password: this.state.password
  })
})
  .then(response => {
    return response.json();
  })
  .then(data => {
    console.log(data);
  });

答案 1 :(得分:0)

发生此问题是因为您没有从中返回任何东西

.then(response => {
  console.log(response);
  response.json();
})

如果将花括号添加到箭头功能;那么您需要添加一个明确的回报。因此,将其更改为:

.then(() => response.json())

.then(() => {
  return response.json();
})

它应该可以工作。

答案 2 :(得分:0)

好像您需要返回Promise返回的.json()

可以使用ES7的现代async/await功能进行一些清理,避免无处不在的回调地狱

const loginUser = async () => {

  const response = await fetch("http://localhost:5000/api/signin", {
    method: "post",
    headers: {
      "Content-Type": "application/json",
      Authorization: "this-can-be-anything"
    },
    body: JSON.stringify({
      email: this.state.email,
      password: this.state.password
    })
  })

  const data = await response.json();

  console.log('[data]', data);

  return data;
}