节点快速路由中的 HTTPS 请求

HTTPS Request in a Node express route

我试图在 node express 的路由中获取 https 请求的结果,但失败了,原因是:connect 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 有效并在浏览器中粘贴时执行 return 操作,

我 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/ routing (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);
  })
});

我使用了模块'request'。正如 Dijkstra 所建议的,即使他的代码(用于快速默认 http 请求)对我不起作用,他仍然提供了解决问题所需的一切,所以谢谢。

我相信这不是 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