angular,如何通过拦截器将XML响应转换为JSON

时间:2018-06-15 12:37:48

标签: angular interceptor

我一直在努力研究如何使用拦截器将我从服务器获得的XML响应转换为JSON格式。对于转换,我使用xml2json并且插件工作正常,所以没有问题。

但是,我的目标是通过拦截器更改响应体。到目前为止的代码如下:

服务:

  getData(query) {
    return new Promise( (resolve, reject) => {
      this.http.get(this.SERVER_URL + query, {responseType: 'text'} ).subscribe(
        (data) => {
          resolve( JSON.parse(data) );
        },
        (err) => {
          reject(err);
        }
      );
    });
  }

拦截器:

  intercept( req: HttpRequest<any>, next: HttpHandler ): Observable<HttpEvent<any>> {

    return next.handle(req)
      .retry(3)
      .map( (event: HttpEvent<any>) => {

        if (event instanceof HttpResponse) {

          // xml2js transform
          parseString(event.body, function(e, res) {
            if (e != null) {
              return (e);
            }

            event = (event as HttpResponse<any>).clone({
              body: JSON.stringify(res)
            });
            return event;
          });
        }

        return event;
      })
      .catch(err => {
        return Observable.of(err);
      });
  }

代码正在运行,但我正在做的是一个缓慢的解决方法:拦截器正在执行parseString()转换,然后JSON.stringify(res)将结果字符串化。这个字符串最终到达http.get的成功处理程序,然后返回JSON.parse(data)

如果我没有对响应主体进行字符串化,则调用http的错误处理程序,因为我猜它是期望文本(字符串)而不是json。但是,如果我将http responseType设置为json,那么拦截器正在接收一个空对象event ..那么我怎样才能消除stringify / parse调用?

感谢每一位帮助,谢谢:)

0 个答案:

没有答案