【发布时间】:2021-09-05 22:01:18
【问题描述】:
我在我的 Nestjs 项目中使用了 Mongodb 本机节点驱动程序,当我运行 nest run 命令时遇到了这个错误:
Nest 无法解析 ProjectService (?) 的依赖关系。请做出来 确保索引 [0] 处的参数 DATABASE_CONNECTION 可用 在 AppModule 上下文中。
可能的解决方案:
- 如果 DATABASE_CONNECTION 是提供程序,它是当前 AppModule 的一部分吗?
- 如果 DATABASE_CONNECTION 是从单独的 @Module 导出的,那么该模块是否导入到 AppModule 中? @模块({ 导入:[ /* 包含 DATABASE_CONNECTION 的模块 */ ] })
DATABASE_CONNECTION 的提供者已在数据库模块中定义,并且数据库模块已在 appModule 中导入,我找不到问题。
src/app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { ProjectController } from './project/project.controller';
import { ProjectService } from './project/project.service';
import { DatabaseModule } from './database.module';
@Module({
imports: [DatabaseModule],
controllers: [AppController, ProjectController],
providers: [ProjectService],
})
export class AppModule {}
src/database.module.ts
import { Module } from '@nestjs/common';
import { MongoClient, Db } from 'mongodb';
@Module({
providers: [{
provide: 'DATABASE_CONNECTION',
useFactory: async (): Promise<Db> => {
try {
const client = await MongoClient.connect('mongodb://127.0.0.1:27017', {
useUnifiedTopology: true
});
return client.db('app-test');
} catch(e){
throw e;
}
}
}
],
exports:[
'DATABASE_CONNECTION'
]
})
export class DatabaseModule { }
src/project/project.service.ts
import { Inject, Injectable } from '@nestjs/common';
import { Db } from 'mongodb';
import { Project } from '../models/project.model';
@Injectable()
export class ProjectService {
constructor(
@Inject('DATABASE_CONNECTION')
private db: Db
) {
}
async getProjects(): Promise<Project[]> {
return this.db.collection('Projects').find().toArray();
}
}
【问题讨论】:
标签: mongodb dependency-injection nestjs