NestJS类或功能中间件在从模块连接时不运行。它也不适用于单个路径、控制器或每个路径。从main.ts连接功能中间件工作正常。
//main.ts
import { ValidationPipe } from '@nestjs/common'
import { NestFactory } from '@nestjs/core'
import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify'
import { AppModule } from './app.module'
declare const module: any
async function bootstrap() {
const app = await NestFactory.create<NestFastifyApplication>(AppModule, new FastifyAdapter())
app.useGlobalPipes(new ValidationPipe())
await app.listen(2100)
if (module.hot) {
module.hot.accept()
module.hot.dispose(() => app.close())
}
}
bootstrap()
//app.module.ts
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common'
import { AuthMiddleware } from './middleware/auth.middleware'
import { UserModule } from './user/user.module'
@Module({
imports: [UserModule],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(AuthMiddleware)
.forRoutes('(.*)')
}
}
//auth.middleware.ts
import { Injectable, NestMiddleware } from '@nestjs/common'
import { FastifyRequest, FastifyReply } from 'fastify'
@Injectable()
export class AuthMiddleware implements NestMiddleware {
use(req: FastifyRequest, res: FastifyReply, next: () => void) {
console.log('test auth middleware')
next()
}
}
预期产出:测试认证中间件
实际:无
5条答案
按热度按时间epggiuax1#
问题是“fastify”软件包与“@nestjs/platform-fastify”一起安装。另外,如果您删除“fastify”软件包,则“@nestjs/platform-fastify”软件包中使用的依赖项也将被删除,因此它将无法正常工作。如果您同时安装了两个软件包,请卸载“fastify”并重新安装“@nestjs/platform-fastify”。
7qhs6swi2#
我没有使用Fastify,但我的中间件没有执行,甚至直接从文档中获取。我构建了我的项目(
npm run build
),然后回到开发模式npm run start:dev
,这似乎工作。如果有疑问,请调查/dist
目录。1cosmwyk3#
我也有同样的问题。使用显式控制器时工作正常,但使用“*”时就不行了。还尝试过:
但那似乎也不起作用。不幸的是,我的解决方案使用了一个全局功能中间件,如这里的例子所示。这不是很容易维护,因为它是在main.ts中定义的,而不是在app.module中定义的。这导致了e2e测试的一些问题,但我最终能够使它起作用。只要确保在main.ts中以及在为e2e测试创建测试模块时使用中间件即可。
main.ts:
在e2e测试模块中:
fnatzsnv4#
在我的例子中,我想在全局应用一个中间件,在特定的模块级别应用一个中间件,但是由于某种原因,当您在特定的模块级别应用中间件时,中间件不工作。
所以我找到了另一种方法。在应用模块中,你可以像这样分配它。
jtw3ybtb5#
对我有效的是:我在前面定义了路由,如下所示,在路由的末尾有一个
/
。我删除了斜线,它现在为我工作
我的模块代码:
希望这能帮上忙