Angular 5 http服务响应错误

Angular 5 http service response error

我正在尝试使用带有 xml 响应的 http RSS 服务。

我收到响应状态 OK(200),但出现以下错误:

Unexpected token < in JSON at position 0 at JSON.parse () at XMLHttpRequest.onLoad ..

我做错了什么,我该如何解析 xml 响应?

Component.ts代码:

this.ns.nBasicApi().subscribe((jsonFromServer) => { 
  this.response = jsonFromServer;
});

服务代码:

nBasicApi():any {
  return this.http.get('http://localhost:3000/api/stocks');
}

服务器代码App.js:

const fetch = require('isomorphic-fetch');
const express = require('express');
const app = express();
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 
'GET,POST,OPTIONS,DELETE,PUT');
res.header('Access-Control-Allow-Headers','Accept,Accept- 
Language,Content-Language,Content-Type');
res.header('Access-Control-Expose-Headers','Content- 
Length,Content-Range');
next();
})
app.route('/api/stocks').get((req, res) => {
 fetch('http://www.nasdaq.com/aspxcontent/NasdaqRSS.aspx? 
data=quotes&symbol=NFLX').then((res) => { 
         return res.text();
 }).then((json) => {
     res.send(json)
 })
});

据我所知,Angular 中没有内置方法来解析 XML,因此您需要找到一些库和 map 响应。 Angular 默认情况下将响应视为 JSON,因此存在您的解析错误。要禁用自动解析,请使用 {responseType: 'text'}

nBasicApi():any {
  return this.http.get('http://localhost:3000/api/stocks', {responseType: 'text'});
}

Angular 不支持 XML。 Angular 默认支持 json。尝试使用如下所示的 npm 包

npm install xml2js -g 在服务文件中导入为:import * as xml2js from 'xml2js';

例子

let formdata = new URLSearchParams();
formdata.set('username','username');
formdata.set('pw','pw'); 
let headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded' });

let options = new RequestOptions({ headers: headers, method: RequestMethod.Post});

postData () {

     this.http.post(this._yourUrl, formdata.toString(), options)
     //convert to JSON here
     .map(res => {
            xml2js.parseString( res.text(), function (err, result) {
            console.dir(result); // Prints JSON object!
         });
     })
     .subscribe(data => { 
          console.log(data);              
     });
}

或者看看这个 jsfiddle http://jsfiddle.net/abdmob/gkxucxrj/1/