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

问题描述 投票:1回答:1

我正在建立一个网站遇到一些麻烦。它使用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
投票

据我所知,这是由几件事组合引起的:

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

这是一个有用的注释:无论何时调用console.log,都可以在CloudWatch > Logs > /aws/lambda/<your-lambda-name>中找到日志输出。这对于弄清楚事情的原因/地点有用。

© www.soinside.com 2019 - 2024. All rights reserved.