首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能从Express.js上传路线,为什么?

不能从Express.js上传路线,为什么?
EN

Stack Overflow用户
提问于 2020-01-11 20:08:58
回答 2查看 348关注 0票数 1

有什么原因不能从Express.js router.put()内部执行GET请求吗?

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

我已经证实

这样做是可行的:

代码语言:javascript
复制
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 });
});

这样做是行不通的:

代码语言:javascript
复制
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...

感谢你的帮助,我花了一天的时间为这件事挠头。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-13 21:37:11

问题的根本原因:

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

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

解决方案:

在router.put()中执行GET时,从Header中移除该GET字段,这样GET具有除Content-Length之外的所有其他标头数据

不幸的是,NodeJS只是抛出了这个Error: socket hang up消息,这个消息并不能很好地描述根本的问题。

票数 0
EN

Stack Overflow用户

发布于 2020-01-11 20:27:49

不,没有特快专递。尝试点击邮递员或卷发的GET请求,看看是否有响应。根本原因可能是您试图发出的get请求无效,或者您正在发出GET请求的服务器可能已关闭。您可以运行以下命令来验证

代码语言:javascript
复制
app.put('/',async (req, res) => {
    let response  = await axios.get('https://google.co.in');
    console.log(response.data);
    res.send({"works": "hello"});
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59698241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档