如何将 JSON 数据添加到 HTML AWS lambda 响应主体?

How do you add JSON data to an HTML AWS lambda response body?

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

站点剥离 URL 参数(例如 /BTC),将其发送到外部 API 端点,其中 returns 一些 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);
  });
};

如有任何帮助,我们将不胜感激!如果需要,很乐意提供更多信息。

据我所知,这是由多种因素共同造成的:

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

这里有一个有用的说明:无论何时调用 console.log,都可以在 CloudWatch > Logs > /aws/lambda/<your-lambda-name> 中找到日志输出。这对于找出 why/where 问题很有用。