在过去的 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
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.
如果我没有 {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()])
}