我正在尝试返回 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