1

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

该站点剥离 URL 参数(例如 /BTC),将其发送到外部 API 端点,该端点返回一些 JSON 数据。我可以使用 显示整个 JSON 响应body: JSON.stringify(response),因此它肯定来自 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);
  });
};

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

4

1 回答 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>。这对于找出问题发生的原因/位置很有用。

于 2018-03-02T00:24:29.520 回答