Lambda自定义@middy中间件返回错误触发502异常如何解决
问题原因
- 核心原因是中间件加载顺序错误。Middy的
onError钩子执行顺序与中间件添加顺序相反,你当前将自定义授权中间件放在httpErrorHandler之后添加,授权中间件抛出的错误无法被httpErrorHandler的错误捕获逻辑处理,导致最终返回的响应结构不符合函数触发器(如AWS API Gateway)的要求,触发器识别到非法响应结构就会返回502错误码、空响应体。 - 你控制台打印的401响应是错误对象序列化后的内容,并未被封装成标准的触发器可识别的返回格式。
修复方案
调整中间件的添加顺序,把自定义业务中间件放在httpErrorHandler之前添加,确保抛出的错误能被错误处理中间件捕获并转换为合法响应:
export const authorizedMiddify = (handler: any) => { return middyfy(handler) .use(httpHeaderNormalizer()) // 先添加自定义业务中间件 .use({ before: (request, next) => { console.log(3) throw createError(401, 'Unauthorized'); } }) // 错误处理中间件放在所有业务中间件最后添加,捕获所有上游抛出的错误 .use(httpErrorHandler()) };
如果需要返回JSON格式的错误响应,可以给httpErrorHandler添加对应配置:
.use(httpErrorHandler({ fallbackMessage: 'Internal Server Error', // 开启后会自动将错误响应转为JSON格式 serializeError: true }))
内容的提问来源于stack exchange,提问作者Iliaaaa
相关产品推荐
相关产品推荐

