Muh*_*ras 13 typescript nestjs
我遵循了Nest JS Crash 教程,Youtube Link,我遵循了这个,但是当我在服务中导入接口时,它显示错误
Nest 无法解析 ItemsService (?) 的依赖项。请确保索引 [0] 处的参数在 AppModule 上下文中可用。
我克隆了教程中给出的存储库,它工作正常,但是当我将该存储库的 src 文件夹复制到我的项目时,它会引发错误。这是我的服务文件
import { Injectable } from '@nestjs/common';
import { Item } from './interfaces/item.interface';
import { Model } from 'mongoose';
import { ItemsModule } from './items.module'
import { InjectModel } from '@nestjs/mongoose';
@Injectable()
export class ItemsService {
constructor(@InjectModel('Item') private readonly itemModel: Model<Item>) {}
});
}
Run Code Online (Sandbox Code Playgroud)
当我评论构造函数行时,它工作正常,我认为问题出在这一行上,
从'猫鼬'导入{模型};
因为当我将鼠标悬停在这一行时,它显示找不到此模块的声明。我什至尝试复制工作代码的 package.json 文件进行测试,但仍然错误保持不变
我的模块项目包含控制器文件、服务文件、模块文件、dto 文件、接口文件、架构文件、
小智 39
为了解决它,您必须从app.module.ts文件中删除 ItemsController 和 ItemsService 导入。
这是解决方案,因为:
items.module.ts文件中导入了 ItemsController 和 ItemsService,因此没有必要在app.module.ts文件中再次导入它们。items.module.ts你有下一行:
@Module({
imports: [MongooseModule.forFeature([{ name: 'Item', schema: ItemSchema }])],
...
})
Run Code Online (Sandbox Code Playgroud)
这是使items.service.ts文件中的依赖注入工作所必需的,因为您可以签入app.module.ts没有该行的
文件。app.module.ts文件中,但是创建该items.module.ts文件是没有意义的
。检查我的回购xD。
小智 16
请从 中删除ItemsController和。无需将它们包含在中,因为您已经导入 到.ItemsServiceAppModuleAppModuleItemsModuleAppModule
应用程序模块.ts
import { AppService } from './app.service';
import { ItemsModule } from "./items/items.module";
import { MongooseModule} from '@nestjs/mongoose';
import config from './config/keys';
@Module({
imports: [ItemsModule, MongooseModule.forRoot(config.mongoURI)],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
项目.service.ts
import { Injectable } from '@nestjs/common';
import { Item } from './interfaces/items.interface';
import { Model } from 'mongoose';
import { InjectModel } from '@nestjs/mongoose';
@Injectable()
export class ItemsService {
constructor(@InjectModel('Item') private readonly itemModel:Model<Item>){}
async findAll(): Promise<Item[]> {
return await this.itemModel.find();
}
async fineOne(id: string): Promise<Item> {
return await this.itemModel.findOne({_id: id});
}
}
Run Code Online (Sandbox Code Playgroud)
Nan*_*tha 13
我也遇到了同样的问题。我从 app.module.ts 中删除了 ItemsController 和 ItemsService 文件。现在它工作正常。所以 app.module.ts 看起来像这样。
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ItemsController } from './items/items.controller';
import { ItemsService } from './items/items.service';
import {MongooseModule} from '@nestjs/mongoose';import { ItemsModule } from
'./items/items.module';
import config from './config/keys';
@Module({
imports: [ItemsModule,MongooseModule.forRoot(config.mongoURI)],
controllers: [AppController ],
providers: [AppService ],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
小智 8
在应用程序模块中不要使用其他控制器或提供程序,例如 UserController
应用程序模块.ts
@Module({
imports: [
MongooseModule.forRoot('mongodb://localhost:27017/nest'),
UserModule,
TasksModule,
AuthModule,
],
controllers: [AppController],
providers: [AppService],
})
Run Code Online (Sandbox Code Playgroud)
和其他模块,如 user.module.ts
@Module({
imports: [
MongooseModule.forFeature([
{
name: 'users',
schema: UserSchema,
},
]),
],
controllers: [UserController],
providers: [UserService],
exports: [UserService],
})
Run Code Online (Sandbox Code Playgroud)
如果您有两个模块相互依赖,请不要直接导入它们,在两个模块中使用forwardRef()
源循环依赖
@Module({
imports: [
MongooseModule.forFeature([
{ name: 'User', schema: UserSchema },
]),
forwardRef(() => BusinessModule),
],
providers: [UserService, UserResolver],
exports: [MongooseModule],
})
export class UserModule {}
Run Code Online (Sandbox Code Playgroud)
并在另一个模块中
@Module({
imports: [
MongooseModule.forFeature([
{ name: 'Business', schema: BusinessSchema },
]),
forwardRef(() => UserModule),
],
providers: [BusinessService, BusinessResolver],
exports: [MongooseModule],
})
export class BusinessModule {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25116 次 |
| 最近记录: |