在 nest js 微服务控制器中使用功能模块服务的问题

如何解决在 nest js 微服务控制器中使用功能模块服务的问题

我创建了一个功能模块“用户”。在这个模块中,我创建了控制器、模型和服务来连接到我的 postgres 数据库。 但是,如果我尝试从我的功能模块控制器调用 userService,我会收到以下错误 [RpcExceptionsHandler] 无法读取未定义的属性“get_users” 类型错误:无法读取未定义的属性“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 在 processticksAndRejections (internal/process/task_queues.js:93:5) 在异步 /usr/src/app/node_modules/@nestjs/microservices/context/rpc-proxy.js:11:32 在异步 ServerTCP.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();
    }
}

user.module.ts:

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserController } from './controller/user.controller';
import { UserEntity } from './models/user.entity';
import { UserService } from './service/user.service';


@Module({
    imports:[
        TypeOrmModule.forFeature([UserEntity])
    ],providers: [UserService],controllers: [UserController]
})
export class UserModule {}

++++++++++++++++ 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 标记为控制器,以便能够在其中注入思想。只需在您的 @Controller() 类中添加 UserControllerhttps://docs.nestjs.com/controllers

,

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?