Node.js将XML转换为JSON并将其返回到前端

时间:2017-09-22 10:38:31

标签: json node.js xml

我正在尝试将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的初学者

2 个答案:

答案 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);
    });
});