Javascript Angular ajax文件上载未捕获500 HTTP响应

Javascript Angular ajax文件上载未捕获500 HTTP响应,javascript,angular,typescript,Javascript,Angular,Typescript,我试图从文件上传中捕获500错误,但我似乎无法做到这一点。我曾尝试在代码中添加多种类型的捕获,但都不起作用 这是我的服务中的主要上载方法: private uploadFile(端点:string,uploadModel:UploadFileModel):可观察{ uploadModel.formData.append('file',uploadModel.file); 返回此。\u httpClient .post(端点,uploadModel.formData{ 报告进展:是的, 观察:“事

我试图从文件上传中捕获
500
错误,但我似乎无法做到这一点。我曾尝试在代码中添加多种类型的捕获,但都不起作用

这是我的服务中的主要上载方法:

private uploadFile(端点:string,uploadModel:UploadFileModel):可观察{
uploadModel.formData.append('file',uploadModel.file);
返回此。\u httpClient
.post(端点,uploadModel.formData{
报告进展:是的,
观察:“事件”
}).pipe(映射(事件=>{
开关(事件类型){
案例HttpEventType.UploadProgress:
const progress=Math.round(100*event.loaded/event.total)/100;
uploadModel.progress=进度;
返回进度;
案例HttpEventType。响应:
console.log('response',event.body);
返回事件.body;
}
}))可观察的;
}
然后我这样称呼它:

const subscription=this.\u表示服务
.uploadFile(端点、模型)
.订阅({
下一步:res=>{
如果(类型res=='number'&&res>=1){
这个.presentationFile.step++;
this.presentationFile.progress=0;
订阅。取消订阅();
返回;
}否则{
console.log('res',res);
}
返回此.setStepComplete(false);
},
错误:err=>console.log('err',err),
complete:()=>console.log('complete')
});
每当创建
500
时,所有打印到控制台的内容如下:


我试图捕获这些
500
错误,以便向用户显示错误消息。

我认为您的订阅中有错误的
{

尝试:


看起来我可以通过将
订阅
管道
附加到post对象而不进行链接来捕获错误

这里的问题是我没有得到响应的主体,因为它返回时是空的

const client = this._httpClient
    .post(endpoint, uploadModel.formData, {
        reportProgress: true,
        observe: 'events'
    });

client.subscribe({
    error: error => console.log('error', error)
});

return client.pipe(map(event => {
    switch (event.type) {
        case HttpEventType.UploadProgress:
            const progress = Math.round(100 * event.loaded / event.total) / 100;
            uploadModel.progress = progress;
            return progress;
    }
})) as Observable<number | null>;
const client=this.\u httpClient
.post(端点,uploadModel.formData{
报告进展:是的,
观察:“事件”
});
client.subscribe({
错误:error=>console.log('error',error)
});
返回client.pipe(映射(事件=>{
开关(事件类型){
案例HttpEventType.UploadProgress:
const progress=Math.round(100*event.loaded/event.total)/100;
uploadModel.progress=进度;
返回进度;
}
}))可观察的;

我所拥有的是有效的语法,我们在代码中的其他地方都使用它,但是,我会尝试一下……事实上你是对的,你正在解构。你能在服务的
映射中添加一个日志,并确保它没有登录错误。我还在你的日志中看到错误'res',这意味着它采用了非错误路径。有两个事件是输出:0和1(发送和上载进度)这很有趣,它不应该进入映射以获得错误响应。我似乎已经想出了一些办法,但我不确定这是否是最佳解决方案。如果您感兴趣,请参阅我的答案。
const client = this._httpClient
    .post(endpoint, uploadModel.formData, {
        reportProgress: true,
        observe: 'events'
    });

client.subscribe({
    error: error => console.log('error', error)
});

return client.pipe(map(event => {
    switch (event.type) {
        case HttpEventType.UploadProgress:
            const progress = Math.round(100 * event.loaded / event.total) / 100;
            uploadModel.progress = progress;
            return progress;
    }
})) as Observable<number | null>;