如何解决如何在Koa流中将错误转发给客户端?
我不知道如何在Koa应用中将流错误传递给客户端。我有:
try{
if(Operator.equals("+")){
System.out.println(FirstNum + SecondNum);
}
else if (Operator.equals("-")){
System.out.println(FirstNum - SecondNum);
}
else if (Operator.equals("*")){
System.out.println(FirstNum * SecondNum);
}
else if (Operator.equals("/")) {
System.out.println(FirstNum / SecondNum);
}
else {
System.out.println("invalid Operator");
}
}
catch (Exception e){
System.out.println("Invalid Operator or number");
}
和我的客户中
try {
const res = await request.request({...streamingRequestConfig});
ctx.body = new Passthrough(); // node stream.Passthrough,per https://github.com/koajs/koa/blob/master/docs/api/response.md#stream
pipeline(res.data,ctx.body,err => {
ctx.body = {streamError: err}
});
// (1) This error appears in pipeline() error handler,// but client receives only a 500 with no parseable body
// res.data.emit('error',new Error('Test stream error');
// (2) This error is caught below and returned to client
// in response body,parseable with Body.json()
// throw new Error('Test request error');
} catch (err) {
ctx.body = {requestError: err}
}
如注释中所述,在(2)处抛出会生成一个响应主体,该主体具有可以在客户端上解析的错误,但是流错误(如在(1)处模拟的)将以通用500响应:内部服务器错误
如何将流错误传递给客户端,以便显示并记录它?
解决方法
出现的答案是,一旦将流通过管道传输到响应,并且字节正在流向客户端,则部分流式响应已经在客户端上,并且无法自发切换到JSON错误响应。
可以在服务器上记录流错误,但是在这种情况下,除了在Body.json()
响应解析中捕获错误并注意流失败之外,对于客户端而言,无需执行其他任何操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。