如何在NestJS中安装Express中间件(Express openapi验证程序)?
我正在写申请书。现在我想安装中间件 然而,我不能让它工作。有一个错误,但它总是导致错误 比如说如何在NestJS中安装Express中间件(Express openapi验证程序)?,express,validation,nestjs,middleware,openapi,Express,Validation,Nestjs,Middleware,Openapi,我正在写申请书。现在我想安装中间件 然而,我不能让它工作。有一个错误,但它总是导致错误 比如说 export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer.apply(middleware({apiSpec "./bff-api.yaml"})) .forRoutes(OrganizationC
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(middleware({apiSpec "./bff-api.yaml"}))
.forRoutes(OrganizationController)
}
}
导致
error TS2345: Argument of type 'OpenApiRequestHandler[]' is not assignable to parameter of type 'Function | Type<any>'.
Type 'OpenApiRequestHandler[]' is missing the following properties from type 'Type<any>': apply, call, bind, prototype, and 4 more.
错误TS2345:类型为“OpenAPIRestHandler[]”的参数不能分配给类型为“Function | type”的参数。
类型“OpenApiRequestHandler[]”缺少类型“Type”中的以下属性:apply、call、bind、prototype和4个以上。
如何在NestJS中安装此中间件?我现在已使其正常工作:
configure(consumer: MiddlewareConsumer) {
middleware({
apiSpec: `${__dirname}/../api-doc/bff-api.yaml`
}).forEach(value => consumer.apply(value).forRoutes(OrganizationController))
}
我添加了一个expressopenapi验证器()
AppModule
看起来基本相同,尽管您不需要迭代中间件:
@模块({
导入:[PingModule],
提供程序:[{provide:APP_FILTER,useClass:openapieexceptionfilter}],
})
导出类AppModule实现了NestModule{
配置(消费者:MiddlewareConsumer){
消费者
.申请(
…OpenApiValidator.中间件({
apiSpec:join(uu dirname,'./api.yaml'),
}),
)
。路线(“*”);
}
}
我还添加了一个异常过滤器,将错误从expressopenapi验证程序转换为正确的响应;否则我总是会得到一个500的错误。您还可以使用此方法将错误转换为自定义错误格式
从'@nestjs/common'导入{ArgumentsHost,Catch,ExceptionFilter};
从“express”导入{Response};
从“ExpressOpenAPI验证程序”导入{error};
@捕获(…对象值(错误))
导出类OpenApiExceptionFilter实现ExceptionFilter{
捕获(错误:ValidationError,主机:ArgumentsHost){
const ctx=host.switchToHttp();
const response=ctx.getResponse();
response.status(error.status).json(error);
}
}
接口验证错误{
状态:编号;
消息:字符串;
错误:数组;
路径?:字符串;
名称:字符串;
}