通过 AWS Lambda/API Gateway 返回 JSONP



我正在尝试返回 jsonp 如回调名称(data.strified)

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 应在设置和未设置回调的情况下工作。

鉴于您有这种类型的 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"})作为输出。

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

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

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

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

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

API 网关和集成响应部分:

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

相关内容

  • 没有找到相关文章

最新更新