关于 API 网关 URL 错误的任何想法SES、API 网关、Lambda 与 javascript/html 的集成?

如何解决关于 API 网关 URL 错误的任何想法SES、API 网关、Lambda 与 javascript/html 的集成?

我之前使用 php 网络表单创建了网站,但我开始尝试在从 S3 启动网站时尝试在 AWS 中使用 Lambda/API 网关/SES 组合,以创建动态提交表单。如果您想快速浏览一下提交表单(和错误),请看这里:https://precious-gemstones.com/about.html

这是我的 javascript,我已将其存储在 S3 存储桶的根级别:

function submitToAPI(e) {
       e.preventDefault();
       var URL = "https://ryj32uh9ki.execute-api.us-east-1.amazonaws.com/email/email";

            var Namere = /[A-Za-z]{1}[A-Za-z]/;
            if (!Namere.test($("#name-input").val())) {
                         alert ("Name must be at least 2 characters.");
                return;
            }

            if ($("#email-input").val()=="") {
                alert ("Please enter your email.");
                return;
            }

            var reemail = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,6})?$/;
            if (!reemail.test($("#email-input").val())) {
                alert ("Please enter a valid email address.");
                return;
            }

       var name = $("#name-input").val();
       var email = $("#email-input").val();
       var message = $("#message-input").val();
       var data = {
          name : name,email : email,message : message
        };

       $.ajax({
         type: "POST",url : "https://ryj32uh9ki.execute-api.us-east-1.amazonaws.com/email/email",dataType: "json",crossDomain: "true",contentType: "application/json; charset=utf-8",data: JSON.stringify(data),success: function () {
           // clear form and show a success message
           alert("Thank you for your inquiry!");
           document.getElementById("contact-form").reset();
       location.reload();
         },error: function () {
           // show an error message
           alert("Error; please try again.");
         }});
     }

这是我的 Lambda 函数:

var AWS = require('aws-sdk');
var ses = new AWS.SES();
 
var RECEIVER = 'inquiry@precious-gemstones.com';
var SENDER = 'no-reply@precious-gemstones.com';

var response = {
 "isBase64Encoded": false,"headers": { 'Content-Type': 'application/json','Access-Control-Allow-Origin': 'precious-gemstones.com'},"statusCode": 200,"body": "{\"result\": \"Success.\"}"
 };

exports.handler = function (event,context) {
    console.log('Received event:',event);
    sendEmail(event,function (err,data) {
        context.done(err,null);
    });
};
 
function sendEmail (event,done) {
    var params = {
        Destination: {
            ToAddresses: [
                RECEIVER
            ]
        },Message: {
            Body: {
                Text: {
                    Data: 'name: ' + event.name + '\nemail: ' + event.email + '\nmessage: ' + event.message,Charset: 'UTF-8'
                }
            },Subject: {
                Data: 'Gemstone inquiry: ' + event.name,Charset: 'UTF-8'
            }
        },Source: SENDER
    };
    ses.sendEmail(params,done);
}

这是我的 html 代码片段:

                        <div class="contact-form">
                            <form id="contact-form" method="post" action="https://ryj32uh9ki.execute-api.us-east-1.amazonaws.com/email/email">
                                <input name="name" type="text" class="form-control" placeholder="Your Name" required>
                                <br />
                                <input name="email" type="email" class="form-control" placeholder="Your Email" required>
                                <br />
                                <textarea name="message" class="form-control" required rows="10">Your Message</textarea>
                                <br />
                                <input type="submit" class="form-control submit" value="Send inquiry">
                            </form>
            </div>
            </div>
                </div>
            </div>
        </div>
    </div>
    <script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
    <script src="submitToAPI.js"></script>
</body>

有什么想法吗? 非常感谢你的帮忙! 更新:从我的 Lambda 触发器看到的 API 网关信息如下: API 端点:https://ryj32uh9ki.execute-api.us-east-1.amazonaws.com/email/email API 类型:REST 授权:无 方法:POST 资源路径:/email 阶段:电子邮件

不需要密钥或授权,当我从 Lambda 测试时,设置工作(我收到电子邮件)。从 API Gateway post 方法测试也成功。但是,它在我的网站上不起作用,这让我相信它是我的 html/javascript 代码中的内容,我将在今晚或明天审查/修改它 - 但任何见解都值得赞赏!

解决方法

创建阶段时,显示的链接不包含 URL 的资源部分:

在你的代码中

aws api 网关 URL:https://ryj32uh9ki.execute-api.us-east-1.amazonaws.com/email

您应该调用代码的实际网址必须是

api + 您的资源名称:https://ryj32uh9ki.execute-api.us-east-1.amazonaws.com/email/

因此,如果我是对的,您将缺少 api url 末尾的资源名称。

例如我有这个api网关部署

api 网址:https://asdasdsadsa.execute-api.eu-central-1.amazonaws.com/v1

我从浏览器为名为 myaccounts 的资源调用的实际 URL 如下所示:

api + 资源:请求 URL:https://asdasdsadsa.execute-api.eu-central-1.amazonaws.com/v1/myaccounts

如果您的方法配置如下所示,则意味着它没有配置任何授权(我假设您没有按照您在此处描述的问题)

enter image description here

编辑

似乎来自你分享的错误信息

{"message": "无法将请求正文解析为 json: 无法将有效负载解析为 json: 无法识别的令牌 'name': 期待 'null'、'true'、'false' 或 NaN\n 在 [Source : (byte[])"name=test&email=test%40yahoo.com&message=Your+Message";行:1,列:6]"}

您将 URL 编码的数据发送到 API 网关上的 application/json 类型设置。

所以你需要在调用api端点时将你的URL编码数据转换为json格式

对应的开发者表单线程:HOWTO: Mapping Template v3.0 to convert form POST data or GET query to JSON

,

您需要禁用对端点的授权。 How to open anonymous access to AWS API Gateway resource 或者将端点授权合并到脚本中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res