如何使用 API Gateway v2 检查 http 请求方法

问题描述

我的架构:

  • AWS HTTP API 与反向代理集成
  • 普通 Lambda 函数
  • 邮递员或浏览器

我正在尝试根据他们推荐的 this 回答检查处理操作的请求方法

'use strict';

const AWS = require('aws-sdk');
const dynamo = new AWS.DynamoDB.DocumentClient();

exports.handler = async (event) => {

    switch (event.httpMethod) {
        case 'GET':
            break;
        default:
            throw new Error(`@@@@ Unsupported method "${event.httpMethod}"`);
    }
    return {
        statusCode: 200,body: JSON.stringify({message: 'Success'})
    };
};

我在我的 lambda 中粘贴了该代码,但它不起作用,我在日志中收到此错误

"errorMessage": "@@@@ Unsupported method \"undefined\"",

那个 lambda 是由我的 HTTP API 触发的,并且路由有 GET 方法

如果我返回事件,我可以看到方法是 GET 或 POST,或者其他什么,看看:

enter image description here

有人知道发生了什么吗?

解决方法

HTTP api (v2) 的输入对象架构与 REST api(来自您的 link)不同。

对于Http api,可以从event.requestContext.http.method获取方法

所以,它看起来像这样。

exports.handler = async (event) => {
    console.log('event',event);
    switch (event.requestContext.http.method) {
        case 'GET':
            console.log('This is a GET Method');
            break;
        default:
            throw new Error(`@@@@ Unsupported method "${event.httpMethod}"`);
    }
    const response = {
        statusCode: 200,body: JSON.stringify('Hello from Lambda!'),};
    return response;
};