为什么 EC2/Node.js GET 请求有效但 POST 甚至没有被路由?

Why do EC2/Node.js GET requests work but POST aren’t even routed?

我的问题的变体已被问过数十次,但我尝试过的都没有奏效。

我的 Node.js API 在本地主机上按预期工作 GETPOST 请求。

在我的 EC2/nginx 实例上,服务器块已正确配置并通过 https 提供静态索引。

然后我将此服务器块配置为我的 API 端口 (8000) 的代理,并且 return API 正在侦听。

然后我 运行 一个简单的 GET /index 端点被路由并正常工作。

但是,此处类似的 POST /checkEmail 端点(请记住,它在本地主机上工作)超时并出现 504 错误。这就是奇怪的地方。

它甚至不会 console.log 有效载荷,函数的第一行。这意味着它甚至没有正确路由。这是我的路线:

const API = require("./controllers/api");

module.exports = [
    { method: 'POST', path: '/checkEmail', options: API.checkEmail },
    { method: 'POST', path: '/sendEmail', options: API.sendEmail },
    { method: 'POST', path: '/recaptcha', options: API.recaptcha },
    { method: 'GET', path: '/index', options: API.index }
    
]

既然 GET 请求 return 是预期的响应,那么这意味着所有这些都是真的:

端点:

const axios = require("axios");
const env   = require("dotenv").config();

const AWS = require("aws-sdk");

const subscriber = require("./middleware/subscriber");
const sanitizer  = require("./middleware/sanitizer");

exports.index = {
    cors: {
        origin: ["*"]
    },

    handler: (request, h) => {
        return "API Fluente";
    }
}

exports.checkEmail = {
    cors: {
        origin: ["*"]
    },
  
    handler: async (request, h) => {
        // This is never logged:
        console.log(request.payload);
        const payload = request.payload;
        const email = await sanitizer.email(payload.email);

        if(!email) throw new Error("Invalid email");

        const response = await verifyEmail(email);
        console.log("checkEmail attempt:", email, response.data)

        if (response.status === 200) {
            return h.response(response.data).code(200);
        }

    }
}

我尝试过的:

None 这些有什么不同。

找到问题了!事实证明,它与 AWS 服务或 Node 无关。

当我应该使用 @hapi/hapi.

时,我使用了已弃用的 hapi 包