如何解决只有在节点js中完成一个方法调用后,我才能返回响应
我有一个带有快速应用程序的节点js。我需要公开一个休息端点,该端点将返回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();
});
}
解决方法
您的代码应该可以工作,但是我怀疑请求错误没有得到处理(错误事件处理程序在您的请求中丢失)
您可以尝试将错误处理程序从响应移动到请求
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();
}
);
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。