Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WebSocketServer decorator gives unexpected value #2934

Open
4 of 15 tasks
bryanrp opened this issue Dec 29, 2023 · 3 comments
Open
4 of 15 tasks

WebSocketServer decorator gives unexpected value #2934

bryanrp opened this issue Dec 29, 2023 · 3 comments

Comments

@bryanrp
Copy link

bryanrp commented Dec 29, 2023

Is there an existing issue for this?

  • I have searched the existing issues

Current behavior

@WebSocketServer decorator returns a Namespace (socket.io) instead of Server (socket.io) when @WebSocketGateway is called with namespace option set. Without the namespace option, it returns a Server, as expected.

@WebSocketGateway()
export class AppGateway {
  @WebSocketServer()
  server: Server;

  @SubscribeMessage('server')
  handleServer() {
    return this.server instanceof Server; // true, as expected
  }
}
@WebSocketGateway({ namespace: 'foo' })
export class FooGateway {
  @WebSocketServer()
  server: Server;

  @SubscribeMessage('server')
  handleServer() {
    return this.server instanceof Server; // false, not as expected
  }
}

Minimum reproduction code

https://github.com/bryanrp/nestjs-issue-websocket

Steps to reproduce

  1. npm install
  2. npm run test:e2e

Expected behavior

All tests are expected to pass. The failed test shows that @WebSocketServer does not return a Server (socket.io) object.

Package

  • I don't know. Or some 3rd-party package
  • @nestjs/common
  • @nestjs/core
  • @nestjs/microservices
  • @nestjs/platform-express
  • @nestjs/platform-fastify
  • @nestjs/platform-socket.io
  • @nestjs/platform-ws
  • @nestjs/testing
  • @nestjs/websockets
  • Other (see below)

Other package

No response

NestJS version

^10.0.0

Packages versions

"dependencies": {
  "@nestjs/common": "^10.0.0",
  "@nestjs/core": "^10.0.0",
  "@nestjs/platform-express": "^10.0.0",
  "@nestjs/platform-socket.io": "^10.3.0",
  "@nestjs/websockets": "^10.3.0",
  "reflect-metadata": "^0.1.13",
  "rxjs": "^7.8.1",
  "socket.io": "^4.7.2"
},
"devDependencies": {
  "@nestjs/cli": "^10.0.0",
  "@nestjs/schematics": "^10.0.0",
  "@nestjs/testing": "^10.0.0",
  "@types/express": "^4.17.17",
  "@types/jest": "^29.5.2",
  "@types/node": "^20.3.1",
  "@types/supertest": "^2.0.12",
  "@typescript-eslint/eslint-plugin": "^6.0.0",
  "@typescript-eslint/parser": "^6.0.0",
  "eslint": "^8.42.0",
  "eslint-config-prettier": "^9.0.0",
  "eslint-plugin-prettier": "^5.0.0",
  "jest": "^29.5.0",
  "prettier": "^3.0.0",
  "socket.io-client": "^4.7.2",
  "source-map-support": "^0.5.21",
  "supertest": "^6.3.3",
  "ts-jest": "^29.1.0",
  "ts-loader": "^9.4.3",
  "ts-node": "^10.9.1",
  "tsconfig-paths": "^4.2.0",
  "typescript": "^5.1.3"
},

Node.js version

18.17.0

In which operating systems have you tested?

  • macOS
  • Windows
  • Linux

Other

No response

@kamilmysliwiec
Copy link
Member

This is the expected behavior.

I just verified and realized that this isn't mentioned in the docs, let me move this issue there

@kamilmysliwiec kamilmysliwiec transferred this issue from nestjs/nest Jan 5, 2024
@VinayakMohite4040
Copy link

@kamilmysliwiec
How to get the direct access to the native, platform-specific server instance, in such setup where namespace is being used inside the @WebSocketGateway() decorator?

@kavyantic
Copy link

kavyantic commented Oct 12, 2024

@WebSocketGateway({namespace:"my-namespace"}) should work but WebSocketGateway decorator does not take any positional argument

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants