在API网关上启用CORS后,这是我发送到http endpoints 的请求:
$.ajax({
type: 'put',
url: 'https://xxxxx.execute-api.us-east-1.amazonaws.com/dev/artist/application/julian_test',
data: {params: {param1: "543543", param2: "fdasghdfghdf", test: "yes"}},
success: function(msg){
console.log(msg);
},
error: function(msg){
console.log(msg);
}
});
这是lambda函数(我使用节点无服务器包,并且代码没有错误):
module.exports.julian_test = (event, context, callback) => {
console.log(event);
console.log(event.body);
var response_success = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin": "*"
},
body: JSON.stringify({
firstUser: {
username: "Julian",
email: "awesome"
},
secondUser: {
username: "Victor",
email: "hello world"
},
thirdUser: {
username: "Peter",
email: "nice"
}
})
};
callback(null, response_success);
};
console.log(event.body)注销:params%5Bparam1%5D = 543543&params%5Bparam2%5D = fdasghdfghdf&params%5Btest%5D = yes
,这不是我想要的格式 . 我查看了OPTIONS Integration Request / body mapping模板,这里是快照 .
我试图删除“application / json”,但之后我收到以下回复:
XMLHttpRequest无法加载https://xxxxxx.execute-api.us-east-1.amazonaws.com/dev/artist/application/julian_test . 因此,不允许对预检请求作出响应,因此不允许访问 - 控制 - 允许 - 原点' header is present on the requested resource. Origin ' null . 响应的HTTP状态代码为500 .
有谁知道如何在后端lambda中获取原始字符串请求主体?请帮忙!
2 回答
这里有两件事:
首先,在您的API网关资源下,转到
Method Response
并确保您有200 OK
映射的响应 .其次,在您的API网关资源下,转到
Integration Request
,在Body Mapping Templates
下选择application/json
并在模板文本编辑器中输入以下代码:应用此选项后,您可以访问您的请求对象:(Node.js)
我花了一段时间来弄明白这一点,向Kenn Brodhagen道具说明:tutorial
屏幕截图适用于用于CORS的OPTIONS方法 .
您的实际Lambda函数调用可能是通过POST方法进行的 . 请检查POST方法下的集成请求Body映射模板 . 如果设置为通过body(默认值),则输入请求中的正文应按原样传递给Lambda .
请使用API网关控制台中的测试功能查看输入如何转换为集成请求 . 这应该可以帮助您调试 .