angular - 使用 HTTP 从 Angular 应用程序中调用 AWS Lambda 函数
问题描述
我使用适用于 Java 的 AWS 开发工具包成功制作、构建和部署了 AWS Lambda。我已经使用 AWS 控制台测试了 Lambda,没有任何问题。
现在我希望每当有人从我的 Angular 应用程序中单击一个按钮时调用 Lambda 函数。我的第一个想法是简单地使用正文对 Lambda API 端点进行 HTTP POST 调用。
请参阅我的以下服务代码:
export class Service{
constructor(private httpClient: HttpClient) {}
createContact() {
const header: HttpHeaders = new HttpHeaders();
header.append('Accept', 'application/text');
this.httpClient
.post(RELAY_URL, test, { headers: header, responseType: "text" })
.subscribe((data) => {
console.log(data);
});
}
}
执行此方法实际上会调用 Lambda 方法,并且 lambda 将成功完成。但是,我的 Angular 客户端没有收到正确的响应。然而,这确实发生了:
- 我在浏览器控制台中收到有关 CORS 的错误
- 我在控制台中收到有关失败的 Http 请求的错误
- 在浏览器的开发人员窗口的网络选项卡中,我从 Http 请求中获得了成功的响应
我很茫然,希望你能帮忙。
解决方案
CORS 仅保护您不读取浏览器中的响应:
- 请求将触发
- 服务器将执行
- 响应将到达,但是
- 浏览器不会显示结果
如果您从提示中触发它,您将得到响应。
我认为您必须在服务器端应用您正在调用的域(应该有一种方法可以为 AWS lambda 执行此操作)。
这就是 CORS 的工作原理。
推荐阅读
- javascript - Axios 获取在浏览器中显示的请求
- html - 不知道为什么 flexbox 没有按预期工作
- amazon-web-services - AWS RDS 无需重启即可更新 SSL/TLS 证书
- mysql - Docker-compose up 在第一次运行时抛出错误,在第二次运行后运行正常
- .htaccess - htaccess:如何用特殊字符替换字符串?
- reactjs - 如何使用 firestoreConnect 检查数据是否已到达?
- python - Matplotlib:将 axhline 添加到 Figure 对象中的子图
- unit-testing - 如何在 go 中实现 CLI 命令的单元测试
- python - 是否可以在 Google Colab 中导入一个 python 文件,该文件本身会导入一个 GitHub 存储库来运行?
- python - tf.dataset 如何与 keras.conv1D 交互?