【问题标题】:nodejs https status 200 but body response null, ajax call works but returning error status 0nodejs https状态200但正文响应为空,ajax调用有效但返回错误状态0
【发布时间】:2020-06-12 06:48:25
【问题描述】:

我正在使用 aws 文档中的代码在静态站点上实现联系表单。当我测试 nodejs lambda 函数时它是成功的,但返回的结果是null

在 API 网关中进行 POST 测试的结果相同。它返回:

HTTP 状态:200
响应正文:空

对于方法执行,它显示Models: application/json => Empty。有问题吗?如果是这样,我不确定要更改什么。

var AWS = require('aws-sdk');
var ses = new AWS.SES();

var RECEIVER = 'name@example.com';
var SENDER = 'name@example.com';

var response = {
 "isBase64Encoded": false,
 "headers": { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': 'example.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 + '\nphone: ' + event.phone + '\nemail: ' + event.email + '\nnote: ' + event.note,
                    Charset: 'UTF-8'
                }
            },
            Subject: {
                Data: 'Website Contact Form: ' + event.name,
                Charset: 'UTF-8'
            }
        },
        Source: SENDER
    };
    ses.sendEmail(params, done);
}

在 html 方面,当我运行脚本时,联系表单按预期工作(一封包含姓名、电子邮件和消息的电子邮件被发送到我的收件箱),但 ajax 请求返回错误状态 0 HTTP Error: 0

function submitToAPI(e) {
       e.preventDefault();
       var URL = "https://Restful API URL";

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

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

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

       $.ajax({
         type: "POST",
         url : "https://Restful API URL",
         dataType: "json",
         crossDomain: "true",
         contentType: "application/json; charset=utf-8",
         data: JSON.stringify(data),


         success: function () {
           alert("Thank you!");
           document.getElementById("contact-form").reset();
       location.reload();
         },
         error: function (response) {
           alert("HTTP Error: " + response.status);
           document.getElementById("contact-form").reset();
       location.reload();
         }});
     }

我在这里搜索了论坛并尝试删除 dataType: "json" 并检查了 CORS 是否已启用。都没有修好。我被困住了。谁能指出我正确的方向?

【问题讨论】:

    标签: javascript node.js ajax amazon-web-services


    【解决方案1】:

    在我看来,您是在告诉您的 lambda 在回调中返回 null。您可以改为返回您的响应变量:

    exports.handler = function (event, context) {
        console.log('Received event:', event);
        sendEmail(event, function (err, data) {
            context.done(err, response); // <--- change null to response
        });
    };
    

    【讨论】:

    • 好眼光。我进行了更改,它现在返回 { "isBase64Encoded": false, "headers": { "Content-Type": "application/json", "Access-Control-Allow-Origin": "example.com" }, "statusCode": 200, "body": "{\"result\": \"Success.\"}" } 但即使表单有效,html/jquery 实现仍然返回 http 状态 0。
    • 您的 ajax 请求是否出错?如果是这样,那是什么?您收到的回复是什么?
    • 是的,ajax 请求正在返回 HTTP 错误:0
    • 除了您在问题stackoverflow.com/a/14507670/1449475 中尝试过的那些之外,还值得检查这些答案中的其他要点
    • 感谢您挖掘它。我去看看。感谢您在这方面的帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-09-26
    • 2020-11-29
    • 1970-01-01
    • 2015-10-13
    • 2019-04-09
    • 1970-01-01
    • 2013-07-18
    • 2020-11-10
    相关资源
    最近更新 更多