Dou*_*hes 7 amazon-web-services node.js aws-lambda aws-api-gateway
我是API网关和Lambda的新手。我正在尝试将基于Node.js Express的API部署到lambda。我正在使用awslabs中的aws- serverless -express示例。这样,我的许多AWS配置都是为我自动创建的。
看来我的API通过API网关正常工作。我的帖子和获取方法工作正常。但是,我需要支持CORS。我的应用程序应该对OPTIONS请求返回正确的CORS响应,但是在AWS上不起作用。
最终,无论我做什么,我都会收到500份关于期权要求的回复。我还无法弄清楚如何获得有关这500个错误的任何信息。我不确定是什么原因造成的。
这就是500响应的主体{"message": "Internal server error"}。
这些是响应头:
内容长度:36
内容类型:application / json
日期:2017年7月9日星期日17:56:24 GMT
状态:500
通过:1.1 9af17e5a616bfc9ac07fc7e415ade9e6.cloudfront.net(CloudFront)
x-amz-cf-id:1_AZmkLqf1rjkog2MRtvcBAe54aIZdPWmNApBTwG48Af-v_g9WHkZw ==
x-amzn-requestid:ec216a62-64cf-11e7-ad2b-4f1e96508dba
x-cache:来自Cloudfront的错误
我很确定我的OPTIONS请求甚至没有到达Lambda上的应用程序。
我尝试使用API网关(和我的应用程序)配置CORS。我正在尝试将其配置为允许所有来源。
如果有什么可以寻找或调试的问题?
编辑:
为了调试此问题,我尝试为API网关启用CloudWatch登录。
之后,我在CloudWatch中看到了这两个网关查找日志:
我一直在使用产品,所以我单击该链接并看到以下内容:
我认为这是一长串的日志条目。我不确定在这种情况下“流”是什么意思。这些条目有数百个。因此,我选择一个带有最新时间戳的时间戳,然后单击它。现在我看到了:
看来我所有的网关日志都像这样。IE:显然是空的。
因此,我是否可以正确设置日志记录?我在找对地方了吗?
我有与 @scopchanov 类似的问题。
在我的 AWS Lambda + API Gateway + Serverless Framework 1.42.3 + Express.js 项目中有效的是:
我必须从 Express 启用 CORS/发送标头:
// AWS API Gateway CORS (OPTIONS) 支持有问题?app.use(cors({credentials: true})); app.options("*", cors());
不要在 API Gateway 中启用 CORS,即不要在serverless.yml:
没有cors: true,所有请求都可以正常工作。
使用cors: true,OPTIONS请求将响应{"message": "Internal server error"}(不管 Lambda 函数做什么,这似乎是由 API 网关直接发送的,或者有问题的 MOCK 集成)。
我刚刚经历过这个...隐藏在有关启用 CORS 的 AWS lambda 文档中的是,您必须在 lambda 中设置 CORS 标头。那么如何做到这一点如下:
let payload = {
statusCode: 400,
body: JSON.stringify('body'),
headers: {"Access-Control-Allow-Origin": "*"} // NEED this for API CORS access
};
callback(null, payload);
Run Code Online (Sandbox Code Playgroud)
您必须返回有效的 statusCode 和正文以及标头,否则 API 将无法将您的 lambda 响应转换为 API 响应。