我正在使用AWS lambda + API Gateway,我需要在url(GET方法)中传递一个数字数组以进行REST调用。似乎一种好方法是将数字作为字符串(逗号分隔)传递,然后使用JSON.parse转换为数字数组。
以下是我正在使用的AWS lambda代码;
printf("%d",i+j+1);
我正在使用此输入测试事件在AWS Lambda中测试此功能;
exports.handler = (event, context, callback) => {
var arr = JSON.parse('[' + event.numbers + ']');
console.log("array: " + arr);
// TODO implement
callback(null, 'Hello from Lambda');
};
一切都按预期工作;没有错误。
但是,当我通过API网关测试它,并在查询中将数字作为字符串传递时,我得到以下错误(通过CloudWatch观察到);
{
"numbers": "1,5"
}
这是传递给lambda的请求,如日志中所示;
*19:19:02
START RequestId: eabab882-8cee-11e7-8e2f-79d3086e061f Version: $LATEST
19:19:02
2017-08-29T19:19:02.688Z eabab882-8cee-11e7-8e2f-79d3086e061f SyntaxError: Unexpected token u in JSON at position 1 at Object.parse (native) at exports.handler (/var/task/index.js:4:20)
19:19:02
END RequestId: eabab882-8cee-11e7-8e2f-79d3086e061f
19:19:02
REPORT RequestId: eabab882-8cee-11e7-8e2f-79d3086e061f Duration: 215.25 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 18 MB
19:19:02
RequestId: eabab882-8cee-11e7-8e2f-79d3086e061f Process exited before completing request*
我无法弄清问题是什么,因为我在两种情况下都传递相同的字符串。
我将不胜感激。
由于 格斯
答案 0 :(得分:2)
通知这个输入json,你需要得到这样的结果:
var arr = JSON.parse('[' + event.params.querystring.numbers + ']');
而不是:
var arr = JSON.parse('[' + event.numbers + ']');
或者使身体贴图模板保持原样:
{ "number": "$input.params('number')" }
我希望我有所帮助!