【问题标题】:Node.js http.get xml is returned 'escaped'Node.js http.get xml 被“转义”返回
【发布时间】:2017-07-04 15:19:14
【问题描述】:

我正在使用 Javascript(节点 6.x)编写一个简单的 AWS Lambda 函数,它应该“代理”意大利新闻提供商的 RSS。

这是函数的代码:

var http = require("http")

exports.handler = (event, context, callback) => {
    http.get("http://www.milanotoday.it/rss/", (response) => {
        response.setEncoding("utf8")

        let xml = ""
        response.on("data", (chunk) => { xml += chunk })
        response.on("end", () => { callback(null, xml) })
    })
}

它可以工作,或者至少它将响应加载到xml 变量中。 我不明白为什么字符串是这样的:

"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<rss version=\"2.0\" xmlns:content=\"http://purl.org/rss/1.0/modules/content/\"...

这似乎是一种“逃脱”。

有人可以帮助我吗? 提前谢谢你...

【问题讨论】:

    标签: javascript node.js xml aws-lambda


    【解决方案1】:

    http.get 可能工作得很好。如果您在 AWS 生态系统之外运行您的代码,您将看到您从 http.get 获取未转义的 XML。问题是 Lambda 希望您返回 JSON,因此当您将字符串传递给回调时,它会被转义。

    如果您通过 API Gateway 运行此功能,您可以在集成响应中进行转换。这样做的方法是从你的 lambda 返回一个对象:

    callback(null, {myXML: xml}))
    

    然后在 API Gateway 中转到您的 GET(或 POST)资源下的集成响应区域,然后单击 200 响应旁边的箭头。这应该显示身体映射的区域。您想为application/xml 添加一个映射,然后添加如下内容:

    #set($inputRoot = $input.path('$'))
    $inputRoot.myXML
    

    这应该会为您提供干净整洁的 XML。这有点难以描述,所以我将发布一个可能有帮助的屏幕截图:

    【讨论】:

      【解决方案2】:

      双引号必须在双引号字符串中进行转义(有意义,对吗?)。现在您只需要解析 XML,例如使用 xml2js

      【讨论】:

      • 有道理,事实是我根本不应该得到外部双引号。我想我可能也不需要 xml2js,因为该函数的唯一目的是将 xml 返回给客户端,而不是与 jquery 本机方法一起使用。
      猜你喜欢
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      • 2014-05-17
      • 2014-08-12
      • 2020-05-20
      • 2019-06-20
      相关资源
      最近更新 更多