s3桶中的静态网页,并在页面内部发出ajax请求以调用lambda函数

时间:2017-03-07 12:40:08

标签: ajax node.js amazon-s3 aws-lambda aws-api-gateway

我已经在s3存储桶中上传了一个html页面,该html页面向api网关URL发送ajax发布请求以发送电子邮件。

问题是,如果我使用邮递员发送邮件请求发送电子邮件但是使用带有ajax代码的s3中的html页面不起作用,则使用相同的api网关URL。

任何想法或帮助对我都有帮助。谢谢 ---- Ajax代码

    $.ajax("https://apigateway-url/email_sending", {
    "type": "POST",
    "data": JSON.stringify(formData),
    "contentType": "application/json"
    }).done(function () {
        console.log("Done")
    }).fail(function () {
        console.log("Failed");
        // console.log(data);
    });

我在s3中尝试过编辑cors配置这么多的帮助,或者在api网关中启用cors,但是没有一个能为我工作。

发送电子邮件的NodeJs代码

    var sendemail = require('./sendemail')
    app.post('/email_sending',function(req,res){
     console.log("Request received For sending mail")
     sendemail.send(req.body,function(err, data){

   // res.setHeader('Access-Control-Allow-Origin', '*');
    res.end("Success");
   })

  })

sendemail模块摘要是:

    ses.sendemail(data, done)

我考虑过这个网站,但没有得到解决方案:https://codehabitude.com/2016/04/05/forms-to-emails-using-aws-lambda-api-gateway/

1 个答案:

答案 0 :(得分:1)

很可能你没有在apigateway中正确设置CORS标头。 apigateway文档http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html清楚地描述了该过程。

一旦设置了CORS并部署了更改,您就可以使用以下curl命令验证CORS预检请求

curl -H "Origin: http://example.com" \
  -H "Access-Control-Request-Method: POST" \
  -H "Access-Control-Request-Headers: X-Requested-With" \
  -X OPTIONS --verbose \
    https://apigateway-url/email_sending

另请注意,在更改反映在API中之前,您需要在设置CORS(Big blue Deploy API按钮 - http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-deploy-api-with-console.html)之后部署更改