我正在尝试将xml数据转换为JSON,以便将其返回到我的Angular应用程序。
我已经能够获取数据,但我不确定如何转换并返回Angular。
我正在使用xml2js
解析器插件来转换xml。
的node.js
router.get('/courselist', (req, res, next) => {
request("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml", function(error, response, body) {
console.log(body);
parser(body, function (err, result) {
res.json(response);
});
});
解析后输出如下:
{"gesmes:Envelope": {
"$": {
"xmlns:gesmes": "http://www.gesmes.org/xml/2002-08-01",
"xmlns": "http://www.ecb.int/vocabulary/2002-08-01/eurofxref"
},
"gesmes:subject": [
"Reference rates"
],
"gesmes:Sender": [
{
"gesmes:name": [
"European Central Bank"
]
}
],
"Cube": [
{
"Cube": [
{
"$": {
"time": "2017-09-21"
},
"Cube": [
{
"$": {
"currency": "USD",
"rate": "1.1905"
}
},
....
{
"$": {
"currency": "JPY",
"rate": "133.86"
}
},
]
}
]
}
]
}
}
角度服务
getCourseList() {
return this._http.get('./api/course-list').map(
(res: Response) => res.json()
).catch(this.handleError);
}
当我在Postman
中调用端点时,我可以看到已解析的输出,但在Angular中我收到错误,因为我没有返回JSON对象。
意外的令牌<在位置0的JSON中
我一直在寻找解决方案,但却找不到适合我的方案。 我可以告诉你我做错了什么,因为我是Node.js的初学者
答案 0 :(得分:1)
您的角度服务正在调用'./api/course-list'
,这不是有效的网址。并且,您可能已将服务器配置为返回index.html
页面甚至404页面。这就是为什么你的角度客户端可能会获得html
页面,并在将其解析为`
希望this._http.get('/api/course-list')
解决问题。
答案 1 :(得分:0)
我设法找到了一个解决方案,我将解析改为response.body
而不是body
,并且它正确地格式化了XML。
另外,node.js和angular中的路径不相同。
router.get('/course-list', (req, res, next) => {
request("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml", function(error, response, body) {
var parsedBody;
var doneParsing = false;
parser(response.body, function (err, result) {
parsedBody = result;
doneParsing = true;
});
if (doneParsing === true) {
response.body = parsedBody;
}
res.json(response);
});
});