node.js - 节点快速路由中的 HTTPS 请求
问题描述
我试图在 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 请求)对我不起作用,他仍然提供了解决问题所需的一切,所以谢谢。
解决方案
我相信这不是https.get()
工作方式。文档在这里。
可能的实现:
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。
推荐阅读
- makefile - Makefile:向编译文件添加横幅
- r - 查找分布在 data.frame 的 2 列中的成对重复
- spring-boot - 创建名为“rabbitListenerContainerFactory”的 bean 时出错
- python-3.x - Python CMD2 中断打印提示
- python - 如何将范围映射转换为字典
- ios - UIAlertcontroller 的可点击 url
- tensorflow - TensorFlow TFDV 不适用于图像
- c++ - 如何在 C++ 中正确管理发送到线程的消息
- python - Jupyter Notebook中Tensorflow中的导入错误
- sql - 如何计算不同的登录次数