Bird
Raised Fist0
NestJSframework~5 mins

WebSocket guards and pipes in NestJS - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of a WebSocket guard in NestJS?
A WebSocket guard controls access to WebSocket events by checking conditions like user authentication before allowing the event handler to run.
Click to reveal answer
beginner
How do pipes work in NestJS WebSocket gateways?
Pipes transform or validate incoming data before it reaches the event handler, ensuring data is correct and safe to use.
Click to reveal answer
intermediate
Where do you apply a guard in a NestJS WebSocket gateway?
You apply guards using the @UseGuards() decorator on the gateway class or on specific event handler methods.
Click to reveal answer
beginner
What happens if a WebSocket guard returns false?
If a guard returns false, the WebSocket event handler does not run, effectively blocking the event for that client.
Click to reveal answer
intermediate
Can pipes modify the data sent to WebSocket event handlers?
Yes, pipes can transform the incoming data before it reaches the handler, for example, converting strings to numbers or trimming text.
Click to reveal answer
What decorator is used to apply a guard in a NestJS WebSocket gateway?
A@UseGuards()
B@UsePipes()
C@SubscribeMessage()
D@WebSocketGateway()
What is the main role of a pipe in a WebSocket gateway?
ATo send messages to clients
BTo authenticate users
CTo transform or validate incoming data
DTo close WebSocket connections
If a guard denies access, what happens to the WebSocket event handler?
AIt does not run
BIt runs twice
CIt runs normally
DIt sends an error message automatically
Which of these is NOT a use case for pipes in WebSocket gateways?
AValidating data format
BSanitizing input
CTransforming data types
DChecking user permissions
Where can you apply pipes in a NestJS WebSocket gateway?
AOnly on the gateway class
BOn both the gateway class and event handler methods
COnly on event handler methods
DPipes cannot be applied in WebSocket gateways
Explain how WebSocket guards and pipes work together in a NestJS gateway to secure and validate incoming events.
Think about the order: first guard checks, then pipe processes data.
You got /4 concepts.
    Describe how to apply a guard and a pipe to a specific WebSocket event handler in NestJS.
    Remember decorators go right above the method.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of a WebSocket guard in a NestJS application?
      easy
      A. To control access and decide if a client can connect or send messages
      B. To transform incoming message data before it reaches the handler
      C. To log all WebSocket messages for debugging
      D. To automatically retry failed WebSocket connections

      Solution

      1. Step 1: Understand the role of guards

        Guards in NestJS are used to control access by allowing or denying client connections or message handling.
      2. Step 2: Differentiate guards from pipes

        Pipes transform or validate data, not control access, so they do not decide connection permissions.
      3. Final Answer:

        To control access and decide if a client can connect or send messages -> Option A
      4. Quick Check:

        Guards control access = A [OK]
      Hint: Guards control access, pipes transform data [OK]
      Common Mistakes:
      • Confusing guards with pipes
      • Thinking guards transform data
      • Assuming guards handle logging
      2. Which of the following is the correct way to apply a guard to a WebSocket gateway method in NestJS?
      easy
      A. @UseGuards(MyGuard) on the gateway class
      B. @UseGuards(MyGuard) on the gateway method
      C. @UsePipes(MyGuard) on the gateway method
      D. @UseFilters(MyGuard) on the gateway class

      Solution

      1. Step 1: Recall decorator usage for guards

        Guards are applied using @UseGuards decorator either on the class or method. Applying on method is valid and common.
      2. Step 2: Identify correct decorator and target

        @UseGuards is correct for guards; @UsePipes is for pipes, and @UseFilters is for exception filters.
      3. Final Answer:

        @UseGuards(MyGuard) on the gateway method -> Option B
      4. Quick Check:

        @UseGuards on method = A [OK]
      Hint: Use @UseGuards for guards, not pipes or filters [OK]
      Common Mistakes:
      • Using @UsePipes instead of @UseGuards for guards
      • Applying filters instead of guards
      • Applying decorators on wrong targets
      3. Given this WebSocket gateway method with a pipe, what will happen if the incoming message payload is invalid?
      @SubscribeMessage('msg')
      @UsePipes(new ValidationPipe())
      handleMessage(@MessageBody() data: CreateDto) {
        return 'Received';
      }
      medium
      A. The server crashes due to invalid data
      B. The message is accepted without validation
      C. The message is rejected and an error is sent back to the client
      D. The message is transformed but still processed

      Solution

      1. Step 1: Understand ValidationPipe behavior

        ValidationPipe checks incoming data and rejects it if invalid, sending an error response.
      2. Step 2: Analyze the method setup

        The method uses @UsePipes with ValidationPipe, so invalid data triggers rejection, not acceptance or crash.
      3. Final Answer:

        The message is rejected and an error is sent back to the client -> Option C
      4. Quick Check:

        ValidationPipe rejects invalid data = C [OK]
      Hint: ValidationPipe rejects invalid data automatically [OK]
      Common Mistakes:
      • Assuming invalid data is accepted
      • Thinking server crashes on invalid data
      • Confusing transformation with acceptance
      4. Identify the error in this WebSocket gateway code snippet:
      @SubscribeMessage('chat')
      @UseGuards(AuthGuard)
      @UsePipes(new ParseIntPipe())
      handleChat(@MessageBody() data: string) {
        return data;
      }
      medium
      A. handleChat method must return a Promise
      B. AuthGuard cannot be used with WebSocket gateways
      C. @UsePipes must be placed before @UseGuards
      D. ParseIntPipe cannot parse a string directly without conversion

      Solution

      1. Step 1: Check pipe compatibility with data type

        ParseIntPipe expects a value that can be parsed to integer, but data is a string that may not convert properly.
      2. Step 2: Validate other decorator usage

        AuthGuard is valid for WebSocket guards, and decorator order does not cause error here. Returning Promise is optional.
      3. Final Answer:

        ParseIntPipe cannot parse a string directly without conversion -> Option D
      4. Quick Check:

        ParseIntPipe needs numeric input = D [OK]
      Hint: Pipes must match expected input types [OK]
      Common Mistakes:
      • Assuming guards can't be used on WebSocket
      • Thinking decorator order always matters
      • Believing return type must be Promise
      5. You want to ensure only authenticated users can send messages and that the message payload is a valid JSON object with a 'text' property. Which combination of guard and pipe setup is best in a NestJS WebSocket gateway?
      hard
      A. Use @UseGuards(AuthGuard) to check authentication and @UsePipes(ValidationPipe) with a DTO validating 'text' property
      B. Use @UsePipes(AuthGuard) to check authentication and @UseGuards(ValidationPipe) for payload validation
      C. Use @UseGuards(AuthGuard) only, and validate payload manually inside the handler
      D. Use @UsePipes(ValidationPipe) only, assuming it checks authentication too

      Solution

      1. Step 1: Assign correct roles to guard and pipe

        Guards handle authentication and authorization, so AuthGuard should be used as a guard.
      2. Step 2: Use ValidationPipe with DTO for payload validation

        ValidationPipe validates and transforms incoming data using a DTO that checks the 'text' property.
      3. Step 3: Evaluate other options

        Swapping guards and pipes misuses decorators; using guards only requires manual payload validation lacking automation; using pipes only misses authentication checks.
      4. Final Answer:

        Use @UseGuards(AuthGuard) to check authentication and @UsePipes(ValidationPipe) with a DTO validating 'text' property -> Option A
      5. Quick Check:

        Guard for auth + Pipe for validation = B [OK]
      Hint: Guards for auth, pipes for data validation [OK]
      Common Mistakes:
      • Swapping guards and pipes roles
      • Skipping automatic validation
      • Assuming pipes handle authentication
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard