Bird
Raised Fist0
NestJSframework~20 mins

gRPC transport in NestJS - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
gRPC Transport Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What is the output of this NestJS gRPC service call?

Consider a NestJS gRPC service with this method:

async getHello(): Promise<{ message: string }> { return { message: 'Hello from gRPC!' }; }

If a client calls getHello, what will the client receive?

NestJS
async getHello(): Promise<{ message: string }> { return { message: 'Hello from gRPC!' }; }
AA JSON object with a 'message' property containing 'Hello from gRPC!'
BA plain string 'Hello from gRPC!'
CAn error because gRPC does not support returning objects
DAn empty response with no data
Attempts:
2 left
💡 Hint

gRPC methods typically return objects matching the protobuf message structure.

📝 Syntax
intermediate
2:00remaining
Which option correctly configures a NestJS microservice to use gRPC transport?

Choose the correct code snippet to create a NestJS microservice using gRPC transport with package 'hero' and proto file 'hero.proto'.

Aapp.createMicroservice({ transport: Transport.GRPC, options: { package: 'hero', protoPath: 'hero.proto' } });
Bapp.connectMicroservice({ transport: Transport.GRPC, options: { package: 'hero', protoPath: 'hero.proto' } });
Capp.connectMicroservice({ transport: Transport.TCP, options: { package: 'hero', protoPath: 'hero.proto' } });
Dapp.createMicroservice({ transport: Transport.HTTP, options: { package: 'hero', protoPath: 'hero.proto' } });
Attempts:
2 left
💡 Hint

Use connectMicroservice with Transport.GRPC for gRPC microservices.

🔧 Debug
advanced
2:00remaining
What error occurs if the protoPath is incorrect in NestJS gRPC microservice config?

If you configure a NestJS gRPC microservice with a wrong protoPath that does not exist, what error will you see when starting the app?

ASyntaxError: Unexpected token in proto file
BTypeError: Cannot read property 'package' of undefined
CError: ENOENT: no such file or directory, open 'wrong.proto'
DNo error, the app starts normally
Attempts:
2 left
💡 Hint

Check the file path carefully when loading proto files.

❓ state_output
advanced
2:00remaining
What is the value of the variable after this gRPC client call in NestJS?

Given this client call:

const response = await client.send<{ message: string }>('getHello', {}).toPromise();

What is the value of response.message if the server returns { message: 'Hi there!' }?

NestJS
const response = await client.send<{ message: string }>('getHello', {}).toPromise();
Anull
BAn error is thrown
Cundefined
D'Hi there!'
Attempts:
2 left
💡 Hint

The client receives the server's response object.

🧠 Conceptual
expert
2:00remaining
Which statement best describes the role of protobuf in NestJS gRPC transport?

Choose the most accurate description of how protobuf works with NestJS gRPC transport.

AProtobuf defines the message and service structure used to serialize and deserialize data between client and server.
BProtobuf is a database technology used to store gRPC messages persistently.
CProtobuf is a UI framework for building gRPC client interfaces.
DProtobuf automatically generates REST endpoints from gRPC services in NestJS.
Attempts:
2 left
💡 Hint

Think about what protobuf files describe in gRPC communication.

Practice

(1/5)
1. What is the main purpose of using gRPC transport in a NestJS application?
easy
A. To enable fast and clear communication between microservices using Protocol Buffers
B. To create RESTful APIs with JSON responses
C. To manage database connections efficiently
D. To handle user authentication and authorization

Solution

  1. Step 1: Understand gRPC transport role

    gRPC transport in NestJS is designed to enable fast communication between services using Protocol Buffers.
  2. Step 2: Compare with other options

    Options B, C, and D describe other unrelated features like REST APIs, database, or auth, which are not the main purpose of gRPC transport.
  3. Final Answer:

    To enable fast and clear communication between microservices using Protocol Buffers -> Option A
  4. Quick Check:

    gRPC transport = fast microservice communication [OK]
Hint: gRPC = fast microservice communication with Protocol Buffers [OK]
Common Mistakes:
  • Confusing gRPC with REST APIs
  • Thinking gRPC manages databases
  • Assuming gRPC handles authentication
2. Which decorator is used in NestJS to link a method to a gRPC service method?
easy
A. @GrpcMethod
B. @GrpcClient
C. @GrpcHandler
D. @GrpcService

Solution

  1. Step 1: Recall NestJS gRPC decorators

    The correct decorator to connect a method to a gRPC service method is @GrpcMethod.
  2. Step 2: Eliminate incorrect options

    @GrpcService, @GrpcHandler, and @GrpcClient are not valid decorators for this purpose in NestJS.
  3. Final Answer:

    @GrpcMethod -> Option A
  4. Quick Check:

    Method to gRPC service = @GrpcMethod [OK]
Hint: Method to gRPC service uses @GrpcMethod decorator [OK]
Common Mistakes:
  • Using @GrpcService instead of @GrpcMethod
  • Confusing client decorators with method decorators
  • Misspelling the decorator name
3. Given this NestJS gRPC service method, what will be the output when called with { id: 5 }?
  @GrpcMethod('HeroService', 'FindOne')
  findOne(data: { id: number }): { name: string } {
    const heroes = [{ id: 1, name: 'Superman' }, { id: 5, name: 'Batman' }];
    return { name: heroes.find(hero => hero.id === data.id)?.name || 'Unknown' };
  }
medium
A. { name: 'Unknown' }
B. { name: 'Superman' }
C. undefined
D. { name: 'Batman' }

Solution

  1. Step 1: Analyze the input and method logic

    The method receives { id: 5 } and searches the heroes array for a hero with id 5.
  2. Step 2: Find matching hero

    Hero with id 5 is { id: 5, name: 'Batman' }, so it returns { name: 'Batman' }.
  3. Final Answer:

    { name: 'Batman' } -> Option D
  4. Quick Check:

    Input id 5 returns Batman [OK]
Hint: Find hero by id in array returns matching name [OK]
Common Mistakes:
  • Returning Superman instead of Batman
  • Returning Unknown when hero exists
  • Returning undefined instead of fallback
4. Identify the error in this NestJS gRPC service method:
  @GrpcMethod('HeroService', 'FindOne')
  findOne(data: { id: number }): { name: string } {
    const heroes = [{ id: 1, name: 'Superman' }];
    return heroes.find(hero => hero.id === data.id).name;
  }
medium
A. Incorrect decorator name
B. Missing return type annotation
C. Possible runtime error if hero not found
D. heroes array should be empty

Solution

  1. Step 1: Understand the find method behavior

    If no hero matches data.id, find returns undefined.
  2. Step 2: Identify the error

    Accessing .name on undefined causes a runtime error.
  3. Final Answer:

    Possible runtime error if hero not found -> Option C
  4. Quick Check:

    Accessing property on undefined causes error [OK]
Hint: Check if find() result can be undefined before accessing properties [OK]
Common Mistakes:
  • Ignoring undefined result from find()
  • Assuming decorator name is wrong
  • Thinking return type annotation is missing
5. You want to implement a streaming gRPC method in NestJS that sends multiple messages back to the client. Which approach correctly sets up the method signature and decorator?
hard
A. @GrpcMethod('ChatService', 'StreamMessages') streamMessages(data: { userId: number }): Promise<{ message: string }> { // implementation }
B. @GrpcMethod('ChatService', 'StreamMessages') streamMessages(data: { userId: number }): Observable<{ message: string }> { // implementation }
C. @GrpcMethod('ChatService', 'StreamMessages') streamMessages(data: { userId: number }): { message: string } { // implementation }
D. @GrpcMethod('ChatService', 'StreamMessages') streamMessages(data: { userId: number }): void { // implementation }

Solution

  1. Step 1: Understand streaming method return types

    Streaming gRPC methods in NestJS return an Observable to send multiple messages over time.
  2. Step 2: Evaluate options

    @GrpcMethod('ChatService', 'StreamMessages') streamMessages(data: { userId: number }): Observable<{ message: string }> { // implementation } returns Observable, suitable for streaming. Options A and C return single responses (Promise or object). @GrpcMethod('ChatService', 'StreamMessages') streamMessages(data: { userId: number }): void { // implementation } returns void, which is invalid.
  3. Final Answer:

    Method returning Observable for streaming -> Option B
  4. Quick Check:

    Streaming gRPC method returns Observable [OK]
Hint: Streaming methods return Observable, not Promise or plain object [OK]
Common Mistakes:
  • Using Promise instead of Observable for streaming
  • Returning plain object for streaming method
  • Using void return type for gRPC method
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