从自定义 lambda 自定义中间件返回错误

问题描述 投票:0回答:3

在过去的 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 错误。

这里出了什么问题? P.S: createError 来自@middy/util

node.js lambda middy
3个回答
0
投票

我认为您正在从

createHttpError
中寻找
@middy/http-error-handler
。或者,您可以为此创建一个包装器(也许称之为
createError()
)并抛出。 文档


0
投票

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

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

我使用 @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.

0
投票

如果我没有 {disableContentTypeError:true} 如果请求不是帖子并且请求正文为空,我也会收到内容类型错误。 希望这可以帮助遇到内容类型错误的人。

import middy from '@middy/core'
import httpHeaderNormalizer from '@middy/http-header-normalizer'
import httpJsonBodyParser from '@middy/http-json-body-parser'
import httpErrorHandler from '@middy/http-error-handler'

export const middlewares = {
    standardMiddleware: middy().use([httpHeaderNormalizer(), httpJsonBodyParser({disableContentTypeError:true}), httpErrorHandler()])
}

© www.soinside.com 2019 - 2024. All rights reserved.