0

在过去的 3-4 小时里,我一直在尝试从自定义 @middy 中间件正确返回错误,但未成功

export const middyfy = (handler: any) => {
    return middy(handler).use(middyJsonBodyParser());
};

export const authorizedMiddify = (handler: any) => {
  return middyfy(handler)
    .use(httpHeaderNormalizer())
    .use(httpErrorHandler())
    .use({
      before: (request, next) => {
          console.log(3)
          throw createError(401, 'Unauthorized');
      }
    });
};
 

这记录:

{
  body: 'Unauthorized',
  headers: { 'Content-Type': 'text/plain' },
  statusCode: 401
}

在邮递员中,我收到空的正文和 502 错误。

这里有什么问题?PS:createError 来自@middy/util

4

2 回答 2

0

TL;DR:可能是错误的水兵包。

我遇到了和你一样的错误。虽然我不知道你使用的确切包。

我通过使用@middy/core而不是middy来修复我的问题。这在普通 JS 中并不明显,但在 Typescript 中存在类型错误middy(handler).use(httpErrorHandler()),这可能是它抛出 502 错误的原因,因为 httpErrorHandler 是不兼容的中间件。

类型错误:

Argument of type 'MiddlewareObj<any, any, Error, Context>' is not assignable to parameter of type 'MiddlewareObject<APIGatewayProxyEvent, ResponsePayload, Context>'.Types of property 'before' are incompatible.
于 2022-02-26T03:54:24.117 回答
0

我想你正在寻找createHttpErrorfrom @middy/http-error-handler。或者,您可以为此创建一个包装器(也许可以调用它)createError()并抛出。 文件

于 2021-10-29T06:05:55.213 回答