如何将 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);
});
};
如有任何帮助,我们将不胜感激!如果需要,很乐意提供更多信息。
据我所知,这是由多种因素共同造成的:
- 在您的
.catch
块中,您没有调用 context.error
。换句话说,如果您的 lambda 函数中存在错误,lambda 函数永远不会向调用者发出它已正确执行完毕的信号。 API 网关绝望地举起双手并吐出一个 502
错误。
response
是一个字符串,因此当您尝试访问它的属性时,会导致异常并最终进入 .catch
块。首先你需要JSON.parse(response)
这里有一个有用的说明:无论何时调用 console.log
,都可以在 CloudWatch > Logs > /aws/lambda/<your-lambda-name>
中找到日志输出。这对于找出 why/where 问题很有用。
我 运行 在构建网站时遇到了一些麻烦。它使用 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);
});
};
如有任何帮助,我们将不胜感激!如果需要,很乐意提供更多信息。
据我所知,这是由多种因素共同造成的:
- 在您的
.catch
块中,您没有调用context.error
。换句话说,如果您的 lambda 函数中存在错误,lambda 函数永远不会向调用者发出它已正确执行完毕的信号。 API 网关绝望地举起双手并吐出一个502
错误。 response
是一个字符串,因此当您尝试访问它的属性时,会导致异常并最终进入.catch
块。首先你需要JSON.parse(response)
这里有一个有用的说明:无论何时调用 console.log
,都可以在 CloudWatch > Logs > /aws/lambda/<your-lambda-name>
中找到日志输出。这对于找出 why/where 问题很有用。