JSON.parse()中的错误(从API网关调用时)



我正在AWS lambda+API网关上工作,我需要在url(GET方法(中为REST调用传递一个数字数组。一个好方法似乎是将数字作为字符串(逗号分隔(传递,然后使用JSON.parse转换为数字数组。

以下是我正在使用的AWS lambda代码;

exports.handler = (event, context, callback) => {
var arr = JSON.parse('[' + event.numbers + ']');
console.log("array: " + arr);
// TODO implement
callback(null, 'Hello from Lambda');
};

我正在使用此输入测试事件在AWS Lambda中测试此功能;

{
"numbers": "1,5"
}

一切如预期;没有错误。

然而,当我通过API网关测试它,并在查询中以字符串形式传递数字时,我得到了以下错误(通过CloudWatch观察到(;

*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*

这是传递给lambda的请求,如日志中所示;

"body-json" : {},
"params" : {
"path" : {
}
,"querystring" : {
"numbers" : "1,6"
}
,"header" : {
}
},
"stage-variables" : {
},

我不知道问题出在哪里,因为我在两种情况下都传递相同的字符串。

如果有任何帮助,我将不胜感激。

谢谢Gus

通知这个输入json后,您需要得到这样的结果:

var arr = JSON.parse('[' + event.params.querystring.numbers + ']');

而不是:

var arr = JSON.parse('[' + event.numbers + ']');

或者制作一个身体映射模板以保持您想要的方式:

{ "number": "$input.params('number')" }

http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html

我希望我帮过忙!

最新更新