node.js - 依赖注入 - INestApplication 上的 app.get(UploadService) 无法解决其依赖关系
问题描述
我正在尝试创建使用我的 Nest 上下文的外部 CLI。我已经创建了入口点,它使用 NestFactory.create 创建应用程序。使用 app.get 访问服务后,服务存在并自行运行。问题是,它不能解决它的任何依赖关系。Docs 上没有示例,我也没有在 Internet 上找到与此问题相关的任何内容。
我在 2019 年 7 月 17 日在节点 10 上使用最新版本的 Nest.js。
main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from '../app.module';
import { UploadService } from 'src/api/upload/upload.service';
import { UploadModule } from 'src/api/upload/upload.module';
async function bootstrap(): Promise<void> {
const app = await NestFactory.create(AppModule);
await app.init();
const service: UploadService = app.select(UploadModule).get(UploadService);
console.log(service); // OK - returns UploadService instance
console.log(service.uploadModel); // X - returns `undefined`
console.log(service.configService); // X - returns `undefined`
}
bootstrap();
app.module.ts
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { ConfigModule } from './config/config.module';
import { ConfigService } from './config/config.service';
import { AwsModule } from './services/aws/aws.module';
import { UploadModule } from './api/upload/upload.module';
@Module({
imports: [
ConfigModule,
MongooseModule.forRootAsync({
useFactory: async (configService: ConfigService): Promise<object> => ({
uri: configService.data.database.mongo.uri,
useCreateIndex: true,
useNewUrlParser: true,
}),
inject: [ConfigService],
}),
AwsModule,
UploadModule,
],
})
export class AppModule {}
上传.module.ts
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { AwsModule } from '../../services/aws/aws.module';
import { UploadService } from './upload.service';
import { UploadSchema } from './upload.schema';
@Module({
imports: [MongooseModule.forFeature([{ name: 'Upload', schema: UploadSchema }]), AwsModule],
providers: [UploadService],
exports: [UploadService],
})
export class UploadModule {}
上传.service.ts
import { Injectable } from '@nestjs/common';
import { AwsService } from '../../services/aws/aws.service';
import { Upload } from './upload.schema';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
@Injectable()
export class UploadService {
constructor(
@InjectModel('Upload')
readonly uploadModel: Model<Upload>,
readonly awsService: AwsService,
) {}
}
预期产出
console.log(service.uploadModel); // X - returns `undefined`
console.log(service.configService); // X - returns `undefined`
是模型/服务实例。不幸的是,它们都返回了undefined
,因为依赖注入没有占据一席之地。
解决方案
我尝试了你所做的,并且在 nestjs 版本:7.6 中它按预期工作。
所以我的假设是他们同时修复了它。
推荐阅读
- php - Excel 文件不直接下载其显示弹出窗口
- css - 美人鱼改变节点/选项的位置无论如何都要固定节点的位置
- java - 无法写入 JSON:无法延迟初始化角色集合:com.managem.model.Region.pays,无法初始化代理 - 无会话
- javascript - Javascript保持模态隐藏
- facebook - Facebook Marketing API, Targeting Search - 按国家和城市进行搜索定位
- c# - C# REST API 控制器:具有 2 个不同操作的相同路由
- python - 替换字符串中的多个字符
- python - 在彼此旁边绘制某个条形图
- vue.js - [Vue 警告]:属性或方法“StartGame”未在实例上定义,但在渲染期间引用
- python - Python async/await 执行时间的差异