You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Middy在AWS Lambda做输入校验时触发中间件错误求助

解决Middy中间件报错:Middleware must be an object containing at least one key among "before", "after", "onError"

我正尝试使用Middy在AWS Lambda中实现输入Schema校验,但Lambda函数持续抛出如下错误:
Middleware must be an object containing at least one key among "before", "after", "onError"

运行环境

Node v18.12.1
"@middy/core": "^4.0.2",
"@middy/http-error-handler": "^4.0.2",
"@middy/http-json-body-parser": "^4.0.2",
"@middy/validator": "^4.0.2",

Lambda代码

import middy from "@middy/core";
import validator from "@middy/validator";
import httpErrorHandler from "@middy/http-error-handler";
import jsonBodyParser from "@middy/http-json-body-parser";


const baseHandler = (event) => {
    const { fname, lname } = event.body;
    return {
      statusCode: 200,
      headers: { "Content-Type": "text/plain" },
      body: `Hello, ${fname}-${lname}.`,
    };
  };

const inputSchema = {
    type: "object",
    properties: {
      body: {
        type: "object",
        properties: {
          fname: { type: "string" },
          lname: { type: "string" },
        },
        required: ["fname", "lname"],
      },
    },
  };

const handler = middy(baseHandler)
    .use(jsonBodyParser())
    .use(
        validator({
        inputSchema,
        })
    )
    .use(httpErrorHandler());

export { handler };

我原本期望当输入参数未提供时,validator会抛出错误,但目前先出现了上述中间件错误。

问题原因及解决方法

这个报错的核心是**@middy/validator的导入方式错误**。Middy v4版本调整了该中间件的导出逻辑:默认导出的是包含多个工具函数的集合,而非直接可用的中间件对象,导致传入.use()的不是符合要求的(包含before/after/onError钩子)中间件。

只需修改导入语句即可解决:

// 替换原导入语句
import { validator } from "@middy/validator";

修改后,validator会被正确识别为Middy兼容的中间件,后续就能正常执行输入Schema校验——当参数缺失或不符合格式时,会抛出对应的错误,再由httpErrorHandler统一处理返回。

内容的提问来源于stack exchange,提问作者mvp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:10:14