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

Middy onError中间件未触发求助:基于Lambda Powertools场景

解决Middy错误中间件不触发的问题

检查中间件注册逻辑

  • 首先确保错误中间件已正确挂载到Middy处理器实例,且注册顺序合理:Middy的onError中间件按注册顺序执行,需避免被其他提前终止错误流程的中间件拦截(默认情况下,即使某中间件设置了响应,后续onError仍会执行,除非手动调用request.stop())。
    正确注册示例:
    import middy from '@middy/core';
    import { Logger } from '@aws-lambda-powertools/logger';
    import { errorLogger } from './your-middleware-file';
    
    const logger = new Logger({ serviceName: 'your-service' });
    const baseHandler = async (event) => {
      // 测试:故意抛出错误验证中间件
      throw new Error('Test error from handler');
    };
    
    // 挂载中间件到处理器
    export const handler = middy(baseHandler)
      .use(errorLogger({ logger }));
    

校验类型定义兼容性

  • 若使用Middy v3+,显式指定MiddlewareObj的泛型参数,避免类型推断错误导致中间件不被识别:
    import type { MiddlewareObj } from '@middy/core';
    import type { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
    
    export const errorLogger = ({ logger }: { logger: Logger }): MiddlewareObj<APIGatewayProxyEvent, APIGatewayProxyResult> => {
      const onError = async (request) => {
        console.log("ERROR LOGGER MIDDLEWARE CALLED");
        const error = request.error ?? new Error("An unknown error occurred.");
        logger.error(`Error occurred: ${error.message}`, error);
      };
    
      return { onError };
    };
    

排查错误抛出场景

  • 确保错误在Middy生命周期内抛出:无论是handler内的同步/异步错误,还是中间件before阶段的错误,onError都应触发。测试时直接在handler中抛出同步错误,排除业务逻辑中错误被静默捕获的情况。

修正日志查看路径

  • Lambda内部的console.log和Powertools日志会输出到CloudWatch Logs(对应Lambda函数的日志组),而非CloudFront日志。去CloudWatch中查找对应函数的日志流,才能看到中间件的输出。

内容的提问来源于stack exchange,提问作者florian norbert bepunkt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:58:16