错误:Nest无法导出不属于当前处理模块(DatabaseModule)的组件/模块。

6

我正在编写一个使用express操作PostgreSQL数据库的非常简单的应用程序,允许进行CRUD操作。

当我运行我的程序时,我会得到以下错误:

Error: Nest不能导出不属于当前处理模块(DatabaseModule)的组件/模块。请验证每个导出单元是否在此特定上下文中可用。

我真的不明白为什么会出现这个错误...在app.module.ts文件中,我导入了DatabaseModule,它调用数据库提供程序(其中包含我的postreSQL连接)。

我是typescript的新手,感到很迷茫 :/ 我只发布了应用程序的入口点,如果这不足够,请告诉我,谢谢您的帮助:

import { NestFactory } from '@nestjs/core';
import { ApplicationModule } from './src/app.module';
import * as express from 'express';
import 'ts-node/register';

async function bootstrap() {
    let instance: any;
    instance = express();
    const app = NestFactory.create(ApplicationModule, instance);
    app.then(instance => instance.listen(3000), () => console.log('Application is listening on port 3000'));
}

bootstrap();

这是 app.module.ts 文件。
import { Module } from '@nestjs/common';
import { MainController } from './controller/main.controller';

import { CatsModule } from './cats.module';
import { CatsController } from './controller/cats.controller';

import { OwnerModule } from './owner.module';
import { OwnerController } from './controller/owner.controller';

import {CatfoodController} from './controller/catfood.controller';
import { CatfoodModule } from './catfood.module';

import { DatabaseModule } from './database/database.module';

@Module({
  controllers: [
      MainController,
      CatsController,
      CatfoodController,
      OwnerController,
  ],
    modules: [
        DatabaseModule,
        CatsModule,
        CatfoodModule,
        OwnerModule,
    ],
})

export class ApplicationModule {}

数据库模块:

import { Module } from '@nestjs/common';
import { databaseProviders } from './database.providers';

@Module({
    components: [...databaseProviders],
    exports: [...databaseProviders],
})
export class DatabaseModule {}

Github仓库:https://github.com/lukile/catProject


展示DatabaseModule,AppModule - Chau Tran
我更新了帖子。 - Shaï
@shai - 如果您对答案满意,请将其标记为已接受的答案。 - Matt Byrne
2个回答

0

enter image description here

我认为你需要将modules放在imports数组中,而不是modules数组中。请仔细检查。并且CatsModuleCatfoodModule的类中是否有相应的controllers(它们应该有)?你不必把每个控制器都放在ApplicationModule中。


是的,你说得对, 我修改了代码,只导入了模块和数组,并且我改成了添加TypeOrmModule.forRoot()而不是DatabaseModule()(即使我认为这不会改变任何事情)。 现在又出现了另一个错误: Nest无法解析CatsService的依赖项(?)。请验证当前上下文中是否可用[0]参数.. 我在catsModule中导出了我的catsService,并且我的catsService构造函数看起来像这样:constructor(@InjectRepository(Cat) private readonly catRepository: Repository<Cat>) - Shaï
你的CatsModule中有TypeOrm.forFeature吗? - Chau Tran
@Module({ imports: [TypeOrmModule.forFeature([Cat])], components: [CatsService], controllers: [CatsController], }) 我做了:/ 我更新了并分享到了Github。 - Shaï
2
我终于解决了我的问题。我从头开始重新启动,现在我终于可以通过API连接创建、读取、更新和删除postgreSQL数据库中的数据了。 如果有人需要帮助,我的Github已经更新 :) 谢谢你的帮助。 - Shaï
@Shaï 很高兴听到这个消息。你介意发布自己的答案并清楚地说明问题以及你是如何解决它的吗? - Chau Tran
2
是的,抱歉 ^^。问题在于我迷失了方向:我有两个模块,但我没有看到它们...显然我调用了错误的模块,在那里我没有导入TypeOrmModule.forFeature()。 在我的服务中,我使用了'@Inject'而不是'@InjectRepository'。这样是行不通的 : / - Shaï

0

看起来你已经创建了一个模块,但是没有进行配置。当你使用@Module创建一个模块时,你需要在@Module内至少创建一个空的控制器数组。

import { Module } from "@nestjs/common";

@Module({
  controllers: []
})
export class AppModule {

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接