首页 > 解决方案 > 如何在 Nestjs 的 rest post 方法中将发布的数据发送给客户端?

问题描述

我是 Nestjs 的新手。我正在尝试在 Nestjs 中以 rest post 方法将发布的数据发送给客户端。我试图应用这种模式。它说 SocketService在任何地方使用。当我尝试使用FeedBackController得到“属性'服务器'不存在类型'SocketService'”错误时。那是因为server=null SocketService. 我不知道如何SocketService在任何地方使用。你能帮忙吗?

//socket.module

import { Module, Global } from '@nestjs/common';
import { SocketService } from './socket.service';

@Global()
@Module({
  controllers: [],
  providers: [SocketService],
  exports: [SocketService],
})
export class SocketModule {}


//socket.service
import { Injectable } from '@nestjs/common';
import { Server } from 'socket.io';

@Injectable()
export class SocketService {
  public socket: Server = null;
}


//appGateway

import { Logger } from '@nestjs/common';
import {
  OnGatewayInit,
  SubscribeMessage,
  WebSocketGateway,
  OnGatewayConnection,
  OnGatewayDisconnect,
  WebSocketServer,
} from '@nestjs/websockets';
import { Server, Socket } from 'socket.io';
import { SocketService } from './socket/socket.service';


@WebSocketGateway()
export class AppGateway
  implements OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect {
  constructor(private socketService: SocketService) {}
  @WebSocketServer() public server: Server;
  
  private logger: Logger = new Logger('AppGateway');

  afterInit(server: Server) {
    this.socketService.socket = server;
    console.log('socket', server);
  }

  handleDisconnect(client: Socket) {
    this.logger.log(`Client disconnected: ${client.id}`);
  }

  handleConnection(client: Socket, ...args: any[]) {
    this.logger.log(`Client connected: ${client.id}`);
  }
}

//app.module

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { FeedBackModule } from './FeedBack/feedback.module';
import { AppGateway } from './app.gateway';
import { SocketModule } from './socket/socket.module';

@Module({
  imports: [FeedBackModule, SocketModule],
  controllers: [AppController],
  providers: [AppService, AppGateway],
})
export class AppModule {}


//app.service
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}
//feedback.controller
import { Controller, Post, Body, Get, Logger } from '@nestjs/common';
import { FeedBackService } from './feedback.service';
import { AppGateway } from '../app.gateway';
import { SocketService } from '../socket/socket.service';
@Controller()
export class FeedBackController {
  // private logger: Logger = new Logger('GateWay');
  constructor(
    private readonly feedBackService: FeedBackService,
    private readonly socketService: SocketService,
  ) {}

  @Post('/save')
  add(@Body('issue') issue, @Body('comment') comment) {
    const id = this.feedBackService.insertProblem(issue, comment);
    //error in here that is because SocketService does not have server
    this.socketService.server.emit('receive-postedFeedback', {
      message: 'muzaffer',
    });
    // this.logger.log('issue', issue);
    // this.logger.log('comment', comment);
    console.log({ issue, comment });
    return { id };
  }

  @Get('/getlist')
  get() {
    return this.feedBackService.getProblems();
  }
}


标签: nestjs

解决方案


推荐阅读