簡體   English   中英

Angular 5-使用XML響應獲取HTTP

[英]Angular 5 - http get with xml response

Newby需要錯誤幫助。 我通過http get請求請求數據。 數據為xml格式。 我需要將其轉換為json以在我的Angular應用中使用。 當我運行以下代碼時,在控制台中出現錯誤“ TypeError this.http.get()。map不是函數。

list() {
  return this.http.get(this.apiRoot).map(res => {
  let data;
  xml2js.parseString( res.toString, function (err, result) {
  console.dir(data); // Prints JSON object!
  data = result;       
  });
  return data;
  })
  .subscribe(data => { 
  console.log(data);              
  });  }

謝謝

您需要從rxjs導入可觀察對象的運算符映射。

import { map } from 'rxjs/operators';

您需要導入rxjs映射運算符。 使用現有代碼,您可以執行以下操作:

import 'rxjs/add/operator/map';

您也可以導入運算符功能本身。 這是首選。 參見: https : //github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md

import { map } from 'rxjs/operators';

...
  return this.http.get(this.apiRoot).pipe(map(res => {

如果您使用的是不推薦使用的HttpModule而不是HttpClient ,則必須執行其他步驟以獲取響應文本:

.pipe(
  map(res => res.text()),

如果您使用的是HttpClient ,則不需要這樣做。


最后,由於您使用的是不支持Promises或Observables的xml2js ,因此您必須將調用包裝為.parseString才能將其添加到可觀察流中。 幸運的是,RxJS提供了一個為您執行此操作的包裝函數: http ://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-bindNodeCallback。

在這里,我們使用switcMap而不是map因為bindNodeCallback返回一個可觀察的對象。 switchMap將為我們扁平化

import { bindNodeCallback } from 'rxjs/observable/bindNodeCallback';
import { switchMap } from 'rxjs/operators';

function list() {
  return this.http
    .get(this.apiRoot)
    .pipe(switchMap(res => bindNodeCallback(xml2js.parseString)(res)))
    .subscribe(console.log);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM