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

Serverless Framework v3.22.0自定义错误映射失效问题求助

解决Serverless Framework v3.22.0 + serverless-offline自定义错误映射失效问题

问题定位

你的配置存在几个细节问题,加上serverless-offline对API Gateway错误映射的实现差异,导致了当前失效情况:

  • 部分template字段末尾多了分号(如404、500),干扰模板解析
  • Content-Type的嵌套引号写法不符合规范
  • 正则匹配的写法在serverless-offline中存在匹配精度问题
  • 直接使用$input.path在离线环境下的解析逻辑和AWS线上有差异

修正后的配置

response:
  headers:
    Content-Type: 'application/json'
  statusCodes:
    200:
      pattern: '' # Default response method
    400:
      pattern: '.*statusCode.*400.*'
      template: '{ "error": $input.path("$.errorMessage") }'
    401:
      pattern: '.*statusCode.*401.*'
      template: '{ "error": $input.path("$.errorMessage") }'
    403:
      pattern: '.*statusCode.*403.*'
      template: '{ "error": $input.path("$.errorMessage") }'
    404:
      pattern: '.*statusCode.*404.*'
      template: '{ "error": $input.path("$.errorMessage") }'
    422:
      pattern: '.*statusCode.*422.*'
      template: '{ "error": $input.path("$.errorMessage") }'
    500:
      pattern: '.*statusCode.*500.*'
      template: '{ "error": $input.path("$.errorMessage") }'

关键调整说明

  • 移除template末尾的多余分号,确保模板是合法的JSON结构
  • 简化Content-Type写法,去掉嵌套引号
  • 放宽正则匹配规则,避免因JSON格式的空格、引号转义问题导致匹配失败
  • 将template改为完整的JSON结构,确保返回合法的JSON响应而非单纯字符串

额外注意事项

  1. 确保错误抛出结构正确:Lambda函数抛出错误时,必须返回包含statusCode和errorMessage字段的对象,示例:
throw new Error(JSON.stringify({
  statusCode: 400,
  errorMessage: "Invalid request parameters"
}));

也可以使用Serverless官方错误类:

const { BadRequestError } = require('@serverless/utils');
throw new BadRequestError("Invalid request parameters");
  1. 检查serverless-offline版本:serverless-offline v10+对API Gateway错误映射的支持更完善,建议升级到与Serverless Framework v3.22.0兼容的最新版本

  2. 避免混用httpResponse配置:httpResponse模式的错误映射逻辑和当前statusCodes配置不兼容,建议先调试好当前配置后再考虑切换模式

内容的提问来源于stack exchange,提问作者Sayf-Eddine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:25:14