我对API网关和Lambda非常陌生。我正在尝试将基于Node.js Express的API部署到lambda。我使用的是AWSlapes中的aws无服务器express示例。因此,我的大部分AWS配置都是自动为我创建的。
似乎我的API通过API网关正常工作。我的post和get方法工作正常。但是,我需要支持CORS。我的应用程序应该返回正确的CORS对选项请求的响应,但它在AWS上不起作用。
最终,无论我做什么,我都会收到500份对选项请求的回复。我还没有弄清楚如何获得关于这500个错误的任何信息。我不确定是什么导致了他们。
这是500响应的主体{“消息”:“内部服务器错误”}
。
以下是响应标题:
内容-长度: 36
内容类型:application/json
日期:2017年7月9日星期日17:56:24 GMT
现状:500
via:1.1 9af17e5a616bfc9ac07fc7e415ade9e6.cloudfront.net(cloudfront)
x-amz-cf-id:1_-AZMKLQF1RKOG2MRTVCBAE54AIZDPWMNAPBTWG48AF-v_g9WHkZw==
x-amzn-requestid:ec216a62-64cf-11e7-ad2b-4f1e96508dba
x-cache:来自cloudfront的错误
我很确定我的选项请求甚至没有到达Lambda上的应用程序。
我尝试过使用API网关(在我的应用程序中)配置CORS。我正在尝试将其配置为允许所有来源。
如果有什么我可以看或做调试这个问题?
编辑:
为了调试这个问题,我尝试为API网关启用CloudWatch日志。
之后,我在CloudWatch中看到这两个网关日志:
我一直在使用prod,所以我点击那个链接,看到这个:
我假设这是一长串日志条目。我不确定“流”在这种情况下是什么意思。有数百个这样的条目。所以,我选择一个最近的时间戳,然后点击它。现在我看到了这个:
似乎我所有的网关日志都是这样的。IE:显然是空的。
那么,我是否正确设置了日志记录?我找对地方了吗?
在使用cloudformation创建无服务器解决方案时,我也遇到了同样的问题。Cloudformation创建了API网关Lambda,一切看起来都正常。但是,选项请求返回内部服务器错误。
我必须去API网关,手动发布我的API只有一次。(即使它已经发布到prod阶段)然后选项请求起作用。我现在可以使用cloudformation进行更新。
我刚刚经历了这个…在AWS lambda文档中隐藏的关于启用CORS的事实是,您必须在lambda中设置CORS头。下面是如何做到这一点:
let payload = {
statusCode: 400,
body: JSON.stringify('body'),
headers: {"Access-Control-Allow-Origin": "*"} // NEED this for API CORS access
};
callback(null, payload);
必须返回有效的状态码和正文以及标题,否则API将无法将lambda响应转换为API响应。
我的问题与@scopchanov类似。
在我的AWS Lambda API网关无服务器框架1.42.3 Express.js项目中起作用的是:
>
我必须从Express启用CORS/发送报头:
//AWS API网关CORS(选项)支持有缺陷吗?app.use(cors({credentials:true}));app.options(“*”,cors());
不要在API网关中启用CORS,即不要在serverless.yml
中启用CORS:
如果没有cors:true
,所有请求都可以正常工作。
使用cors:true
,OPTIONS
请求将响应{“message”:“Internal server error”}
(无论Lambda函数做什么,这似乎都是由API网关直接发送的,或者是错误的模拟集成)。
我使用RESTAssured练习web服务。在post请求中,它返回500服务器错误,其中我使用邮差发送请求,没有错误。谁能帮我调试一下这个错误吗?请给点意见。任何帮助都是感激的?提前道谢。 错误消息的状态代码应为<200>,但为<500>。 堆栈跟踪:
我正在使用react.js应用程序调用API。我从AWS API网关收到关于CORS策略的错误: CORS策略阻止从来源“http://localhost:3000”访问位于“https://awsapigatewayid.execute-api.ap-south-1.amazonaws.com/staging/top10”的XMLHttpRequest:飞行前响应中的access-control
我的浏览器控制台上有一个错误:“放置http://localhost:8000/post/2 500(内部服务器错误)” 我使用资源控制器和我的路由-路由e::资源('post','PostController'); 此处为更新帖子的资源控制器代码: 这里我的视图代码: Ajax代码: 顺便说一下,我在文件头上使用了元令牌{{csrf_token()}}。但是我在本地主机上发现了500个内部服务器
两天前,我们的贝宝整合出了问题。不幸的是,尝试联系贝宝支持已经证明没有帮助(没有回复在2天),所以我会尝试我的运气,在这里。 谢谢!
我正在Android系统中进行网络通信项目,但我的应用程序不起作用!经过一些调试,我发现每个网络请求都有来自系统的空响应。 我尝试了很多方法,例如:1)硬重启手机2)将所有网络权限添加到清单文件中 3)使用本地网络(我的手机作为服务器)4)让所有应用程序连接到网络:设置 但!什么也没发生... 这是我的类似问题链接,但在这个主题中没有答案:无法仅在我的Android应用程序中连接到互联网。连接in
问题内容: 这工作正常: 这将返回400 Bad Request(只是使用.ajax来支持错误处理的上述jQuery的重新格式)。 问题答案: 我认为您只需要再添加2个选项(和):