繁体   English   中英

无法从 Express.js PUT 路由获取,为什么?

[英]Cannot GET from Express.js PUT route, why?

是否有任何原因无法从 Express.js router.put() 内部执行 GET 请求?

我有两条路线。 完全相同的 api 调用在 router.get() 路由中工作并挂在 router.put() 中。

我已经确认

这有效:

router.get('/:id', async (req, res) => {
  const { headers } = req;
  let result;
  try {
    result = await axios({ method:'get', url: '/some-url', headers });
  } catch(error) {
    res.status(500).send(new Error('myError');
  }
  res.send({ result });
});

这不起作用:

router.put('/:id', async (req, res) => {
  const { headers } = req;
  let result;
  let finalResult;

  try {
    result = await axios({ method:'get', url: '/some-url', headers });
  } catch(error) {
    res.status(500).send(new Error('myError');
  }

  // logic based on the result of the above GET determines what the value of `finalResult`
  finalResult = { some: 'data' };

  res.send({ finalResult });
});

即使axios({ method:'get', url: '/some-url' })在两条路由中完全相同,它在一个而不是另一个中工作。

router.put()路由总是挂起很长时间,最终节点输出: Error: socket hang up, code: 'ECONNRESET', etc...

感谢任何帮助,我已经花了一天多的时间来解决这个问题。

不,快递中没有这样的东西。 尝试从邮递员或 curl 发出 GET 请求,看看是否有响应。 根本原因可能是您尝试发出的 get 请求无效,或者您发出 GET 请求的服务器可能已关闭。 您可以运行以下来验证

app.put('/',async (req, res) => {
    let response  = await axios.get('https://google.co.in');
    console.log(response.data);
    res.send({"works": "hello"});
});

我的问题的根本原因:

http 标头有一个Content-Length键,它阻止了 GET 调用正确解析。

由于这些 api 调用发生在 router.put() 回调中,因此标题有一个Content-Length指向要开始 PUT 的有效负载“主体”的大小。

解决方案:

在router.put() 中执行GET 时,从我的Headers 中删除Content-Length字段,以便GET 具有除Content-Length之外的所有其他Headers 数据

不幸的是,NodeJS 只是抛出了那个Error: socket hang up消息,该消息并没有很好地描述潜在的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM