节点快速路由中的HTTPS请求

时间:2019-12-03 09:35:03

标签: node.js express routes http-get

我试图在node express的路由中获得https请求的结果,但失败的原因是:连接ETIMEOUT。知道我错了吗?

router.get("/", async (req, res) => {
  try {
    result = await https.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY');
    console.log(result);
    res.send(result);
  }
  catch (err) {
    console.log(err);
  }
});

编辑: 该URL有效,并且在粘贴到浏览器中时确实会返回某些内容,

我的API中的其他端点可以正常工作,但是它们没有想到http请求。它们看起来像这样:

router.get("/", (req, res) => {
  try {
    res.sendFile("\\\\abc.local\\a$\\b$\\xyz\\001-005-877.pdf");
  }
  catch (err) {
    res.status(500).json({ err: err.toString() });
  }
});

编辑: 完成: 我在index.js /路由中出现输入错误(app.use(“ / test”,require(“ ./ routes / test”)));这导致了超时。 然后使用此代码:

router.get("/", (req, res) => {
  request('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', function (error, response, body) {
    console.log('error:', error);
    console.log('statusCode:', response && response.statusCode);
    console.log('body:', body);
  })
});

我使用了模块“请求”。正如 Dijkstra 所建议的那样,即使他的代码(用于明确的默认http请求)对我来说不起作用,他仍然提供了解决问题所需的一切,所以谢谢。

1 个答案:

答案 0 :(得分:0)

我相信https.get()的工作方式不是这样。文档为here

可能的实现:

router.get("/", async (req, res) => {
  https.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', (result) => {
    console.log('statusCode:', res.statusCode);
    console.log('headers:', res.headers);

    const data = '';
    result.on('data', function (chunk) {
      body += chunk;
    });

    result.on('end', () => {
      res.send(JSON.parse(data));
    });
  }).on('error', (e) => {
    console.error(e);
  });
});

这是执行此类典型任务的非常复杂的代码。这就是为什么有流行的软件包可以处理后台所有复杂部分的原因。我更喜欢使用Request