【问题标题】:How do you add JSON data to an HTML AWS lambda response body?如何将 JSON 数据添加到 HTML AWS lambda 响应正文?
【发布时间】:2018-03-01 19:56:46
【问题描述】:

我在构建网站时遇到了一些问题。它使用 AWS lambda 函数。我正在 AWS CodeStar 上构建和部署。

该站点剥离 URL 参数(例如 /BTC),将其发送到外部 API 端点,该端点返回一些 JSON 数据。我可以使用body: JSON.stringify(response) 显示整个 JSON 响应,因此它肯定来自 API。但是,我想在发送回客户端之前将 JSON 值转换为 HTML 标记。然而,当我做类似var html = '<h1>JSON.stringify(response['DISPLAY']['BTC']['USD']['MARKET'])</h1>'; 的事情时。我收到内部服务器错误 - 格式错误的请求。

我想不通。我对 AWS 的世界还很陌生,所以可能忽略了一些东西,我在文档中四处查看,似乎找不到与此相关的任何内容。

另外,当我在网页上显示JSON.stringify 输出时。如果我在浏览器控制台中重新解析它,response['DISPLAY']['BTC']['USD']['MARKET'] 返回一个值 - 所以我相当确定有效负载数据的语法是正确的。

exports.get = function(event, context) {

var ticker = event.pathParameters.currency;

rp(`https://min-api.cryptocompare.com/data/pricemultifull?fsyms=${ticker}&tsyms=USD`)
  .then(function (response) {

  var html = `<h1>${JSON.stringify(response['DISPLAY']['BTC']['USD']['MARKET'])}</h1>`;

    context.succeed({
      statusCode: 200,
      body: html,
      headers: {'Content-Type': 'text/html'}
    });
  })
  .catch(function (err) {
    console.log('error: ', err);
  });
};

任何帮助将不胜感激!如果需要,很高兴提供更多信息。

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-api-gateway aws-codestar


    【解决方案1】:

    据我所知,这是由几件事共同造成的:

    1. 在您的.catch 块内,您没有调用context.error。换句话说,如果您的 lambda 函数中有错误,则 lambda 函数永远不会向调用者发出它已正确执行完成的信号。 API 网关绝望地举起手,吐出502 错误。
    2. response 是一个字符串,因此当您尝试访问它的属性时,会导致异常并最终出现在您的 .catch 块中。首先你需要JSON.parse(response)

    这里有一个有用的说明:无论何时调用console.log,都可以在CloudWatch &gt; Logs &gt; /aws/lambda/&lt;your-lambda-name&gt; 中找到日志输出。这对于找出问题发生的原因/位置很有用。

    【讨论】:

      猜你喜欢
      • 2022-06-15
      • 1970-01-01
      • 2018-10-29
      • 1970-01-01
      • 2019-07-26
      • 2016-07-30
      • 2019-08-13
      • 2023-02-08
      • 1970-01-01
      相关资源
      最近更新 更多