我正在建立一个网站遇到一些麻烦。它使用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);
});
};
任何帮助将不胜感激!如果需要,很高兴提供更多信息。
答案 0 :(得分:1)
据我所知,这是由几件事的结合引起的:
.catch
区块内,您没有打电话给context.error
。换句话说,如果lambda函数中存在错误,则lambda函数从不表示它已完成对调用者的正确执行。 API网关绝望地抛出手并吐出502
错误。response
是一个字符串,因此当您尝试访问其属性时,会导致异常并最终进入.catch
块。首先,您需要JSON.parse(response)
这是一个有用的注释:无论何时拨打console.log
,都可以在CloudWatch > Logs > /aws/lambda/<your-lambda-name>
中找到日志输出。这对于弄清楚事情的原因/地点非常有用。