等待较长时间后,获取操作会产生空响应

时间:2019-04-18 17:53:57

标签: node.js timeout fetch

我有用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秒后直接在浏览器上点击时得到的响应

Browser response 任何解决方法的帮助将不胜感激

4 个答案:

答案 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中设置断点,并确保为响应填充正确的字段。

Node.js Debugging Guide...