使用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仅保护您免于在浏览器中读取响应:

  1. 请求将触发
  2. 服务器将执行
  3. 响应将到达,但是
  4. 浏览器不会向您显示结果

如果从提示符处将其触发,则会得到响应。

我认为您必须在服务器端应用您正在调用的域(对于AWS Lambda,应该有一种方法可以做到这一点)。

这就是CORS的工作方式。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...