使用 Fastify 的 NestJs 在 app.listen() 之后不执行代码
NestJs with Fastify doesn't execute code after app.listen()
这是我的第一个问题,所以如果我错过了一些重要的事情,我想提前道歉。
所以这是非常基本的,但我没有在任何地方找到答案,正如标题所述,我的 NestJs 应用程序 运行 Fastify,在 app.listen( 'port') 行,Express 不会发生这种情况。 OBS:我指的是 main.ts 文件。
相关代码如下:
async function bootstrap() {
const app = await NestFactory.create<NestFastifyApplication>(
AppModule,
new FastifyAdapter({ logger: { level: 'warn' } }),
);
const configService = app.get(ConfigService);
await app.listen(configService.get<number>(ENV_KEYS.PORT), '0.0.0.0');
console.log(
`Application is running on: ${await app.getUrl()}\nApplication Version: ${version}`,
);
}
bootstrap();
await app.listen
之后的 console.log()
永远不会执行,即使应用程序正常运行,据我的测试显示,await app.listen()
之后的代码也不会执行。
我想知道如何解决这个问题,因为我需要在应用程序启动后 运行 一些代码。
所以感谢@Micael Levi 指出我在 github (github.com/nestjs/nest/issues/7572) 上的一个问题,我开始研究我的控制器中的问题,以及冻结的原因app.listen()
上的应用程序是因为我的 AuthController 的“双重实例”,让我解释一下
我在 AuthModule 上定义了我的 AuthController:
// auth.module.ts
@Module({
imports: [
PassportModule,
JwtModule.register({
secret: JWT_CONSTANTS.SECRET,
}),
],
controllers: [AuthController],
providers: [AuthService, LocalStrategy, JwtStrategy],
exports: [AuthService, LocalStrategy, JwtStrategy],
})
并且在 AppModule 中,我在导入 AuthModule 的同时还再次声明了 AuthController:
// app.module.ts
@Module({
imports: [
ConfigModule.forRoot(getConfigServiceConfiguration()),
TypeOrmModule.forRootAsync({
useFactory: async (configService: ConfigService) =>
getDatabaseModuleOptionsAsync(configService),
inject: [ConfigService],
}),
AuthModule, // <-AuthController is declared within AuthModule scope
UsuarioModule,
ClienteModule,
],
controllers: [AppController, AuthController] // <- AuthController here again,
providers: [AppService],
})
从 AppModule 中的 controllers:[]
中删除 AuthController 解决了我的问题。菜鸟错误,但出于某种原因,这不是 express 的问题,也不会引发 Fastify 的任何编译错误!
这是我的第一个问题,所以如果我错过了一些重要的事情,我想提前道歉。
所以这是非常基本的,但我没有在任何地方找到答案,正如标题所述,我的 NestJs 应用程序 运行 Fastify,在 app.listen( 'port') 行,Express 不会发生这种情况。 OBS:我指的是 main.ts 文件。
相关代码如下:
async function bootstrap() {
const app = await NestFactory.create<NestFastifyApplication>(
AppModule,
new FastifyAdapter({ logger: { level: 'warn' } }),
);
const configService = app.get(ConfigService);
await app.listen(configService.get<number>(ENV_KEYS.PORT), '0.0.0.0');
console.log(
`Application is running on: ${await app.getUrl()}\nApplication Version: ${version}`,
);
}
bootstrap();
await app.listen
之后的 console.log()
永远不会执行,即使应用程序正常运行,据我的测试显示,await app.listen()
之后的代码也不会执行。
我想知道如何解决这个问题,因为我需要在应用程序启动后 运行 一些代码。
所以感谢@Micael Levi 指出我在 github (github.com/nestjs/nest/issues/7572) 上的一个问题,我开始研究我的控制器中的问题,以及冻结的原因app.listen()
上的应用程序是因为我的 AuthController 的“双重实例”,让我解释一下
我在 AuthModule 上定义了我的 AuthController:
// auth.module.ts
@Module({
imports: [
PassportModule,
JwtModule.register({
secret: JWT_CONSTANTS.SECRET,
}),
],
controllers: [AuthController],
providers: [AuthService, LocalStrategy, JwtStrategy],
exports: [AuthService, LocalStrategy, JwtStrategy],
})
并且在 AppModule 中,我在导入 AuthModule 的同时还再次声明了 AuthController:
// app.module.ts
@Module({
imports: [
ConfigModule.forRoot(getConfigServiceConfiguration()),
TypeOrmModule.forRootAsync({
useFactory: async (configService: ConfigService) =>
getDatabaseModuleOptionsAsync(configService),
inject: [ConfigService],
}),
AuthModule, // <-AuthController is declared within AuthModule scope
UsuarioModule,
ClienteModule,
],
controllers: [AppController, AuthController] // <- AuthController here again,
providers: [AppService],
})
从 AppModule 中的 controllers:[]
中删除 AuthController 解决了我的问题。菜鸟错误,但出于某种原因,这不是 express 的问题,也不会引发 Fastify 的任何编译错误!