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

如何用Middy validator校验pathParameters和queryStringParameters

操作方法

1. 安装必要依赖

Middy的validator中间件没有包含在核心包内,需要单独安装,同时推荐搭配官方http-error-handler中间件自动处理校验失败的HTTP响应:

npm install @middy/validator @middy/http-error-handler

validator内部默认使用Ajv做Schema校验,不需要额外单独安装Ajv。

2. 编写校验规则替换手动判空

validator通过JSON Schema定义校验规则,可以同时覆盖pathParameters、queryStringParameters、请求体等所有API Gateway事件字段。替换后的完整代码如下:

import middy from '@middy/core'
import validator from '@middy/validator'
import httpErrorHandler from '@middy/http-error-handler'
import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda'

// 定义事件校验Schema
const eventSchema = {
  type: 'object',
  required: ['pathParameters'], // 要求pathParameters整体存在
  properties: {
    pathParameters: {
      type: 'object',
      required: ['id'], // 要求pathParameters下必须有id字段
      properties: {
        id: {
          type: 'string',
          minLength: 1, // 禁止空字符串,匹配非空校验要求
        }
      }
    },
    // 按需添加queryStringParameters校验规则
    queryStringParameters: {
      type: 'object',
      properties: {
        // 示例:校验page参数如果传了必须是数字格式字符串
        page: {
          type: 'string',
          pattern: '^\\d+$'
        }
      }
    }
  }
} as const

async function lambdaHandler(event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> {
  // 经过validator校验后,不需要再手动判空
  return {
    statusCode: 200,
    body: `Hello ${event.pathParameters!.id} from ${event.path}`
  }
}

const handler = middy(lambdaHandler)
  // 注意中间件顺序:错误处理中间件要放在最前面,才能捕获后续中间件抛出的错误
  .use(httpErrorHandler())
  .use(validator({
    eventSchema
  }))

export default handler

说明

  • 校验不通过时,validator会自动抛出400 Bad Request错误,http-error-handler会把错误转换成格式统一的JSON响应返回给客户端,不需要手动写判空、抛错的重复逻辑。
  • 如果请求没有携带query参数,API Gateway会将queryStringParameters设为null,只要你没有在Schema的required数组里加入queryStringParameters,这种情况不会触发校验报错,符合常规接口的参数可选逻辑。
  • 如果需要自定义校验失败的错误信息,可以在Schema对应字段下加errorMessage配置,也可以在validator初始化时传入自定义的Ajv实例,实现更复杂的校验规则。
  • 开启strictNullChecks的场景下,如果不想用非空断言!,可以结合Schema推导经过校验后的事件类型,彻底消除空值判断的冗余代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:15:35