【发布时间】:2020-08-08 13:50:52
【问题描述】:
我正在使用 React js 中的 fetch api 向我的后端服务器发布请求
const formData = new FormData();
formData.append("image", file);
formData.append("userId", currentUser.id);
formData.append("sliderNumber", sliderNumber);
const myHeaders = new Headers();
myHeaders.append("Content-Type", file.type);
myHeaders.append("Aceess-Control-Allow-Origin", "*");
fetch("http://localhost:4000/upload/slide-image", {
method: "POST",
headers: myHeaders,
mode: "no-cors",
body: formData
})
.then(response => response)
.then(data => console.log("Printing data: ", data));
};
在 Elixir 后端
def upload(conn, params) do
# uploading code
#send response to the client with amazon s3 image url
send_resp(conn, 200, image_url)
end
但是来自 fetch api 的响应对象是空的
Response {
body: null
bodyUsed: false
headers: Headers {}
ok: false
redirected: false
status: 0
statusText: ""
type: "opaque"
url: ""
}
当我用状态码 400 响应时它不会改变。
似乎 fetch api 在某些时候没有正确构建 Reponse 对象。因为我可以在浏览器网络选项卡中找到正确的状态代码和响应正文。但是 Response 对象不保存来自后端服务器的响应。
有什么想法吗?
【问题讨论】:
-
您期待来自服务器的 JSON 响应吗?
-
当您使用
"mode": "no-cors"时,并非您指定的所有标头都被允许。检查developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch 了解更多信息。由于在标题中您允许使用 cors,我认为您可能意味着删除"mode": "no-cors"位。另外,.then(response => response)可能还有其他意思。
标签: javascript fetch-api