我尝试过这段代码:
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的提取。
没有内容,为什么?
答案 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;
}