在init上运行程序
我将创建一个程序(脚本),该程序在运行时会启动操作,因此我不在此程序中使用路由
I would create a program (script) that launches actions when it's get run, so I'm not using routes in this program
我正在使用 NestJS框架(要求).
实际上,我正在尝试在main.ts
文件中编写代码,并使用我的方法导入服务.
Actually I'm trying to write my code in main.ts
file and importing a service with my methods .
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import {AppService} from './app.service'
import { TreeChildren } from 'typeorm';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
let appService: AppService; <- can't use appService methods
this.appService.
bootstrap();
我的服务
@Injectable()
export class AppService {
constructor(
@InjectRepository(File) private readonly fileRepository: Repository<File>,
) {}
async getTypes(): Promise<File[]> {
return await this.fileRepository.find();
}
}
我会使用服务来处理我的操作,所以我会使用DI,它不能在非类文件中工作.
I would use services to treat my operations so I sould use DI, which is not working in a non class file.
我会知道如何以适当的方式在初始化时间内运行我的操作
I would know how to run my operations in init time in a proper way
有两种方法可以做到这一点:
There are two ways to do this:
使用生命周期事件(类似于Angular中的更改检测挂钩)来运行代码并注入所需的服务,例如:
Use a Lifecycle Event (similar to change detection hooks in Angular) to run code and inject the services needed for it, e.g.:
export class AppService implements OnModuleInit {
onModuleInit() {
console.log(`Initialization...`);
this.doStuff();
}
}
模块
export class ApplicationModule implements OnModuleInit {
constructor(private appService: AppService) {
}
onModuleInit() {
console.log(`Initialization...`);
this.appService.doStuff();
}
}
B)执行上下文
使用执行上下文访问main.ts中的任何服务:
B) Execution Context
Use the Execution Context to access any service in your main.ts:
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
const appService = app.get(AppService);
}