Return JSONP 通过 AWS Lambda/API 网关
Return JSONP via AWS Lambda/API Gateway
我正在尝试 return jsonp,如 callbackname(data.strified)
callback( null,
( !!event.cb && event.cb.length > 0 )
? event.cb.replace( /[^a-z0-9_]/i, '' ) + '(' + JSON.stringify( data ) + ')'
: data
);
我现在的快速而肮脏的方式 returns 数据,如果给它 ?cb=test returns:
"test({\"valid\":false,\"data\":false})"
有没有办法去除引号和转义字符?
API 应该可以使用和不使用回调集。
您可以使用集成映射模板来执行此操作。像这样的东西应该可以帮助你解析 Json。
$util.parseJson($input.json('$'))
Here 是关于映射模板的更多详细信息。
假设您有这种类型的 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"})
作为输出。
正如 Çağatay Gürtürk 指出的那样,您将结果字符串化并 return 它。
但是,如果您的 lambda 也接受非回调,您可以签入 VTL 模板:
API 网关和集成响应部分:
#if($input.params('callback') != "")
$util.parseJson($input.json('$'))
#else
$input.json('$')
#end
我正在尝试 return jsonp,如 callbackname(data.strified)
callback( null,
( !!event.cb && event.cb.length > 0 )
? event.cb.replace( /[^a-z0-9_]/i, '' ) + '(' + JSON.stringify( data ) + ')'
: data
);
我现在的快速而肮脏的方式 returns 数据,如果给它 ?cb=test returns:
"test({\"valid\":false,\"data\":false})"
有没有办法去除引号和转义字符? API 应该可以使用和不使用回调集。
您可以使用集成映射模板来执行此操作。像这样的东西应该可以帮助你解析 Json。
$util.parseJson($input.json('$'))
Here 是关于映射模板的更多详细信息。
假设您有这种类型的 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"})
作为输出。
正如 Çağatay Gürtürk 指出的那样,您将结果字符串化并 return 它。
但是,如果您的 lambda 也接受非回调,您可以签入 VTL 模板:
API 网关和集成响应部分:
#if($input.params('callback') != "")
$util.parseJson($input.json('$'))
#else
$input.json('$')
#end