【发布时间】:2019-11-03 17:05:48
【问题描述】:
我使用 NestJS 框架,并且想在我的应用程序中将多个中间件应用于路由。每个中间件都是一个实现NestMiddleware 接口的类。这些中间件之一是异步的,在调用路由处理程序之前不会被使用。有没有办法在处理路由之前解决这个中间件的承诺?
我的代码
异步中间件(page-loader.middleware)
import { Injectable, NestMiddleware } from '@nestjs/common';
@Injectable()
export class PageLoader implements NestMiddleware {
async use(req: any, res: any, next: () => void) {
try {
req.body.html = await req.body.fetcher.fetch();
} catch (error) {
throw new Error(error);
} finally {
next();
}
}
}
控制器 (create-article.controller)
import { Controller, Post, Body } from '@nestjs/common';
import { SaveArticleService } from './save-article.service';
import { CreateArticleDto } from './create-article.dto';
@Controller()
export class CreateArticleController {
constructor(private readonly saveArticleService: SaveArticleService) {}
@Post('/create')
async create(@Body() createArticleDto: CreateArticleDto) {
return this.saveArticleService.save(createArticleDto);
}
}
模块 (create-article.module)
import { Module, NestModule, MiddlewareConsumer, RequestMethod } from '@nestjs/common';
import { CreateArticleController } from './create-article.controller';
import { SaveArticleService } from './save-article.service';
// Another (sync) middleware
import { ExtensionExtractor } from './extension-extractor.middleware';
// The async middleware
import { PageLoader } from './page-loader.middleware';
@Module({
controllers: [CreateArticleController],
providers: [SaveArticleService],
})
export class CreateArticleModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(ExtensionExtractor, PageLoader)
.forRoutes({ path: 'create', method: RequestMethod.POST});
}
}
我没有包含控制器中使用的服务的 sn-p,因为它与我的问题无关。
我尝试了什么
这个question 没有帮助我解决问题,因为中间件结构不同。我正在等待中间件方法解决它的承诺,而不是等待中间件内部重用的输入。
这些github issue 的答案不相关,因为 NestJS API 发生了巨大变化。
提前感谢您的帮助!
【问题讨论】:
标签: async-await middleware nestjs