使用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
相关产品推荐
相关产品推荐

