Fetch在等待很长时间时给出空响应
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fetch在等待很长时间时给出空响应相关的知识,希望对你有一定的参考价值。
我用反应和节点做了app。
react应用程序需要对节点应用程序在端口5100上运行的节点应用程序进行api调用。我面临的问题是,在等待很长一段时间后,我在控制台中得到net_err空响应。事情是我的api需要200秒才能从服务器获得响应。
我打的时候
http://localhost:5100/api/users/wait-ip
我在200秒后得到回复但是当我在反应应用程序中点击这个时
fetch('/api/users/wait-ip')
我在控制台上收到以下错误
GET http://localhost:3000/api/users/wait-ip net::ERR_EMPTY_RESPONSE
这是我对api的功能
router.get('/api/users/wait-ip',(req,res)=>{
//Others things happen here
setTimeout(()=>{
return res.json({
data:1
})
},150000)
})
这是我在150秒后直接在浏览器上点击时得到的响应
将Node.js API与React一起使用是一种常见的用例。我认为您在获得响应时遇到问题的原因是您正在同步使用fetch
调用。始终使用async / await。
async function getUsers() {
let response = await fetch('/api/users/wait-ip');
let users= await response.json();
//...
return users;
}
使用功能:
getUsers().then(result => {console.log(JSON.stringify(result));});
希望有所帮助。
我可能是因为跨源资源共享(CORS)标头。通常从浏览器调用时会发出一个“OPTION”调用,然后是“GET”。
我会尝试
fetch('/api/users/wait-ip', {
mode: 'no-cors' // 'cors' by default
})
如果这解决了问题,您要么强制不要在客户端使用cors。或者服务器应该管理它。另一种选择是允许代理设置这些标头。
ref:https://developers.google.com/web/ilt/pwa/working-with-the-fetch-api
部分:跨源请求
对我来说,问题出在客户端和服务器上。我已经阅读了一些关于如何修复服务器超时的帖子。其中一个是
const server = http.listen(port, () => console.log(`Server running on port ${port}`));
server.timeout = 200000;
这很有用,但仅适用于直接浏览器调用。
对于异步调用,我需要为我想要的每个函数设置它
router.get('/wait-ip',(req,res)=>{
req.timeout =160000;
setTimeout(()=>{
return res.json({
data:1
})
},150000)
})
对于使用pxoy的客户端部分,它无法正常工作。所以我所做的就是发布了完整的网址
fetch('http://localhost:5100/api/users/wait-ip')
我希望这对其他人也有帮助
这是一个API问题。我会在您的API中设置断点,并确保为响应填充了正确的字段。
以上是关于Fetch在等待很长时间时给出空响应的主要内容,如果未能解决你的问题,请参考以下文章