我有用react和node制作的应用程序。
react应用程序需要对节点应用程序在端口5100上运行的节点应用程序进行api调用。我面临的问题是,在等待了很长时间之后,我在控制台中得到了net_err空响应。问题是我的api需要200秒钟才能从服务器获得响应。
当我点击
http://localhost:5100/api/users/wait-ip
200秒后我得到响应,但是当我在react应用程序中点击
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秒后直接在浏览器上点击时得到的响应
答案 0 :(得分:2)
将Node.js API与React结合使用是一个常见的用例。我认为您在获得响应时面临问题的原因是您正在同步使用fetch
调用。始终使用异步/等待。
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));});
希望有帮助。
答案 1 :(得分:1)
我可能是因为跨源资源共享(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
部分:跨域请求
答案 2 :(得分:1)
对我来说,问题出在客户端和服务器上。 我已经阅读了一些有关如何解决服务器超时问题的文章。其中之一是
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')
我希望这对其他人也有帮助
答案 3 :(得分:0)
这是API问题。我会在您的API中设置断点,并确保为响应填充正确的字段。