我希望rxjs observable只返回数据,所以我想使用HttpInterceptor来改变HttpResponse的主体。代码是
@Injectable()
export class NodeInterceptor implements HttpInterceptor {
intercept(
req: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>> {
return next.handle(req).map(event => {
if (event instanceof HttpResponse) {
console.log(event);
if (event.status === 200) {
event.body = event.body.result;
}
}
return event;
});
} }
但显示身体无法改变,我该怎么做?
答案 0 :(得分:1)
让HttpInterceptor完成它应该做的事情,你不需要修改HttpInterceptor来返回Angular中的ResponseMessages。
这是您从Api im Angular捕获响应消息的方法。
在您的service.ts
add(obj: Model): Observable<Model> {
return this.http
.post(this.url, item, { responseType: 'text' });
}
在您的组件中
this.service.add(this.obj).subscribe(
(value) => { this.response = value },
(error) => { },
() => {
if (this.response === "Data saved successfully.") {
// here you receive Response message.
}
});
希望这有帮助。
<强>更新: 您可以创建Generic HttpService并从所有组件中调用它。
@Injectable()
导出类ApiServices {
url: string;
constructor(private http: HttpClient, config: APIConfig) {
this.url = config.server + config.apiUrl;
}
public getAll(type: string): Observable<T[]> {
return this.http
.get(this.url + type)
.map((res: any) => res);
}
public get<T>(type:string, id?: number): Observable<T> {
return this.http
.get<T>(this.url);
}
public add<T>(type:string, item: T): Observable<any> {
return this.http
.post(this.url + type, item, { responseType: 'text' });
}
public update<T>(type: string, item: T): Observable<any> {
return this.http
.put(this.url + type, JSON.stringify(item), { responseType: 'text' });
}
public delete<T>(id: number) {
return this.http
.delete <T>(this.url);
}
}