通过AWS Lambda / API Gateway返回JSONP

时间:2016-05-25 12:11:27

标签: amazon-web-services aws-lambda aws-api-gateway

我试图像在callbackname(data.strified)中一样返回jsonp

callback( null, 
    ( !!event.cb && event.cb.length > 0 ) 
    ? event.cb.replace( /[^a-z0-9_]/i, '' ) + '(' + JSON.stringify( data ) + ')'
    : data
);

我快速而肮脏的方式现在返回数据,如果给出?cb = test,则返回:

"test({\"valid\":false,\"data\":false})"

有没有摆脱引号和转义字符? API应该使用和不使用回调设置。

3 个答案:

答案 0 :(得分:5)

鉴于你有这种类型的lambda函数:

exports.handler = function(event, context) {
    var data={"test":"data"};
    context.done( null, 
            ( !!event.cb && event.cb.length > 0 ) 
            ? event.cb.replace( /[^a-z0-9_]/i, '' ) + '(' + JSON.stringify( data ) + ')'
            : data
    );
};

当你给它一个像

这样的事件时
{
  "cb": "callback"
}

它会给出这个输出:

"callback({\"test\":\"data\"})"

到目前为止,这么好。现在您来到API网关,在集成响应部分中,您可以编写此

$util.parseJson($input.json('$'))

当您调用API网关端点时,将获得callback({"test":"data"})作为输出。

答案 1 :(得分:1)

您可以使用集成映射模板执行此操作。这样的东西可以帮助你解析Json。

$util.parseJson($input.json('$'))

Here是有关映射模板的更多详细信息。

答案 2 :(得分:1)

正如ÇağatayGürtürk指出的那样,你将结果字符串化并将其返回。

但是,如果您的lambda也接受非回调,则可以签入VTL模板:

API网关和集成响应部分:

#if($input.params('callback') != "")
$util.parseJson($input.json('$'))
#else
$input.json('$')
#end