节点快速路由中的 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。
我试图在 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。