我有一个Express应用程序,并且在其中有一个对API的HTTP GET请求。 当没有错误时,它运行良好,但是当出现故障时,我想通过Express向客户端发送自定义响应:
const https = require('https');
// more code: init express, middlewares, etc
app.get('/my-endpoint', async (req, res) => {
https.get('https://my-api.com', (resp) => {
let data = '';
resp.on('data', (chunk) => {
data += chunk;
});
resp.on('end', () => {
console.log(JSON.parse(data));
res.send({ data: JSON.parse(data) })
});
}).on("error", (err) => {
console.log("Error: " + err.message);
res.send({ data: 'Something went wrong' })
});
});
问题在于,总是发送res.send({ data: JSON.parse(data) })
解析为的内容,当它起作用时为对象数组,否则为空对象{}
。如果请求失败,我将无法发送'Something went wrong'
。
我将感谢您的帮助。我正在学习。
答案 0 :(得分:0)
在您的示例中,当您调用https://my-api.com
时,服务器响应为200,并返回HTML。
错误发生在JSON.parse(data)
中,并且不会进入on("error", ...)
部分。
您可以像这样捕获此错误:
resp.on("end", () => {
try {
console.log(JSON.parse(data));
res.send({ data: JSON.parse(data) });
} catch (e) {
res.send({ data: "Something went wrong" });
}
});
否则,您的代码可以正常工作,并且在非200响应时返回{ data: 'Something went wrong' }