【问题标题】:Node.js convert XML to JSON and return it to FrontendNode.js 将 XML 转换为 JSON 并将其返回给前端
【发布时间】:2018-03-03 21:57:50
【问题描述】:

我正在尝试将 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 对象。

JSON 中位置 0 处的意外令牌

我一直在寻找解决方案,但找不到适合我的解决方案。 你能告诉我我做错了什么,因为我是 Node.js 的初学者

【问题讨论】:

  • 您是否检查了响应以确保它实际上返回了 JSON?
  • 它不返回 JSON,我尝试在解析器中 JSON.parse(result) 但仍然没有效果

标签: json node.js xml


【解决方案1】:

我设法找到了一个解决方案,我将解析更改为 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);
    });
});

【讨论】:

    【解决方案2】:

    您的 Angular 服务正在调用 './api/course-list',这不是一个有效的 url。而且,您可能已将服务器配置为返回 index.html 页面,甚至是 404 页面。这就是为什么您的 Angular 客户端可能会获取 html 页面,并在将其解析为 `

    时抛出错误

    希望this._http.get('/api/course-list') 解决问题。

    【讨论】:

    • 我有代理设置,它将 .api 替换为正确的路径。我肯定会正确调用端点,因为我还有其他可以工作的端点。问题在于我要发送回角度的数据
    • 检查Chrome Debugger Console 的网络选项卡以查看您从后端获得的响应。 Unexpected token < in JSON at position 0 明确表示响应以< 开头,在html/xml 的情况下是可能的。由于您已经在 Postman 中验证了 api,因此剩下的唯一可能是仅与 angular-client 有关。
    • 我收到了回复Status Code:200 OK,内容类型不正确content-type:text/html; charset=UTF-8
    • 并且,还要检查内容。它不应该是json
    • 找到了解决方案,部分问题是在 Node.js 中的路径我有 /courselist 和角度它是 /course-list。但我仍然需要进行更多调整。感谢您的帮助!
    猜你喜欢
    • 2018-04-14
    • 2019-03-19
    • 2010-12-18
    相关资源
    最近更新 更多