Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在nest js micro service controller中使用功能模块服务时出现问题_Service_Controller_Nestjs_Micro - Fatal编程技术网

在nest js micro service controller中使用功能模块服务时出现问题

在nest js micro service controller中使用功能模块服务时出现问题,service,controller,nestjs,micro,Service,Controller,Nestjs,Micro,我已经创建了一个功能模块“用户”。在这个模块中,我创建了控制器、模型和服务,以连接到我的postgres db。 然而,如果我试图从我的功能模块控制器调用userService,我会得到以下错误 [RpcExceptionsHandler]无法读取未定义的 TypeError:无法读取未定义的属性“get_users” 在UserController.get(/usr/src/app/dist/user/controller/user.controller.js:23:33) 在/usr/src

我已经创建了一个功能模块“用户”。在这个模块中,我创建了控制器、模型和服务,以连接到我的postgres db。 然而,如果我试图从我的功能模块控制器调用userService,我会得到以下错误 [RpcExceptionsHandler]无法读取未定义的 TypeError:无法读取未定义的属性“get_users” 在UserController.get(/usr/src/app/dist/user/controller/user.controller.js:23:33) 在/usr/src/app/node_modules/@nestjs/microservices/context/rpc context creator.js:44:33 在处理和拒绝时(内部/process/task_queues.js:93:5) 在async/usr/src/app/node_modules/@nestjs/microservices/context/rpc proxy.js:11:32 异步服务器tcp.handleMessage(/usr/src/app/node_modules/@nestjs/microservices/server/server tcp.js:55:54)

下面是我的user.controller.ts文件:

import { Logger } from '@nestjs/common';
import { UserI } from '../models/user.interface';
import { UserService } from '../service/user.service';
import { MessagePattern } from '@nestjs/microservices';

export class UserController {

    private logger = new Logger('AppController');
    constructor(private readonly userService: UserService) {}

    @MessagePattern('add_user')
    async add(user: UserI) {
        return this.userService.add(user);
    }

    @MessagePattern('get_user')
    async get() {
        return this.userService.get_users();
    }
}
+++++++++++++++++++++ user.service.ts:

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { from } from 'rxjs';
import { Repository } from 'typeorm';
import { UserEntity } from '../models/user.entity';
import { UserI } from '../models/user.interface';

@Injectable()
export class UserService {

    
    constructor(
        @InjectRepository(UserEntity)
        private userRepository: Repository<UserEntity>
    ) {}

    add(user: UserI) {
        return this.userRepository.save(user);
    }

    get_users() {
        return this.userRepository.find();
    }
}
+++++++++++++++ app.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule } from '@nestjs/config';
import { UserModule } from './user/user.module';

@Module({
  imports: [
    ConfigModule.forRoot({isGlobal:true}),
    TypeOrmModule.forRoot({
      type: 'postgres',
      url: process.env.DATABASE_URL,
      autoLoadEntities: true,
      synchronize: true
    }),
    UserModule
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

您应该将
UserController
标记为控制器,以便能够在其中注入思想。只需在
UserController
类中添加
@Controller()

看起来从
AppModule
拾取的
UserController
。您应该只在单个模块文件中定义提供程序和控制器,否则最终会覆盖一些元数据。从
AppModule
中删除
UserController
,并将其仅保留在
UserModule
中。它应该可以从那里解决您的问题。

您可能正在使用webpack吗?或者其他可能会修改注入令牌的东西?从您显示的代码来看,一切都很好。添加
@Controller()
可能会解决问题?添加@Controller后,该问题已解决,但现在我收到不同的错误消息。[ExceptionHandler]Nest无法解析UserController(?)的依赖项。请确保索引[0]处的参数UserService在AppModule上下文中可用@JayMcDonielI没有在应用程序模块中导入用户控制器,目前它只在用户模块中,如说明所示。这不是您的错误所在saying@McDoniel不需要在应用程序模块中设置正确的控制器,我已经在用户模块中设置了它。@pkvd right,但是您的错误实际上是无法在
AppModule
的上下文中解析
UserController
的依赖项。添加控制器装饰器后,该错误得到解决。但现在我得到了不同的错误,如上所述。
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule } from '@nestjs/config';
import { UserModule } from './user/user.module';

@Module({
  imports: [
    ConfigModule.forRoot({isGlobal:true}),
    TypeOrmModule.forRoot({
      type: 'postgres',
      url: process.env.DATABASE_URL,
      autoLoadEntities: true,
      synchronize: true
    }),
    UserModule
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}