#javascript #node.js #express #http #promise
#javascript #node.js #выразить #http #обещание
Вопрос:
У меня есть узел js с экспресс-приложением. Мне нужно предоставить конечную точку rest, которая вернет ответ на http-вызов. Что бы я ни пробовал, он возвращается до http-запроса. Не могли бы вы помочь
app.all('/query', function(req, res){
// here i need to make a http call
let urlCall = new Promise((resolve, reject) => {
http.get('http://test.com', (response) => {
let sdata = '';
response.on('data', (fragments) => {
sdata = fragments;
});
response.on('end', () => {
let response_body = sdata;
resolve(response_body.toString());
});
response.on('error', (error) => {
// promise rejected on error
reject(error);
});
});
});
urlCall.then((response) => {
var responseData=response;
res.json(responseData);
res.end();
}).catch((error) => {
console.log(error);
res.end();
});
}
Комментарии:
1. почему вы используете
new Promise
?
Ответ №1:
Ваш код должен работать, но я подозреваю, что ошибка запроса не обрабатывается (обработчик события ошибки отсутствует в вашем запросе).
Вы можете попробовать переместить обработчик ошибок из ответа в запрос
app.all("/query", function (req, res) {
// here i need to make a http call
let urlCall = new Promise((resolve, reject) => {
http
.get("http://test.com", (response) => {
let sdata = "";
response.on("data", (fragments) => {
sdata = fragments;
});
response.on("end", () => {
let response_body = sdata;
resolve(response_body.toString());
});
})
.on("error", (error) => { // handling request errors
console.error("error");
// promise rejected on error
reject(error);
});
});
urlCall.then(
(response) => {
res.json(response);
res.end();
},
(error) => {
console.log(error);
res.end();
}
);
});