无法从 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()路由总是挂了很久,最终Node输出: 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 Headers 有一个键 Content-Length 阻止 GET 调用正确解析。

由于这些 api 调用发生在 router.put() 回调中,Headers 有一个 Content-Length 指向有效负载的大小 "body"这是 PUT 开头的。

解法:

在 router.put() 中执行 GET 时,从我的 Headers 中删除 Content-Length 字段,这样 GET 就会拥有除 [=] 之外的所有其他 Headers 数据10=]

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