Skip to main content

@Router()

The @Router() decorator marks a class as a tRPC router. It's the equivalent of @Controller() in NestJS but for tRPC procedures.

Basic Usage

import { Router } from 'nest-trpc-native';

@Router('cats')
class CatsRouter {
// procedures go here
}

This creates a tRPC router namespace at cats, so procedures are accessed as trpc.cats.list.query() on the client.

Multi-Level Namespaces

You can use dotted aliases to create nested router objects:

@Router('admin.users')
class AdminUsersRouter {
@Query()
list() {
return [];
}
}

Client usage: trpc.admin.users.list.query().

Root-Level Procedures

Pass an empty string or omit the argument to define flat procedures at the root:

@Router('')
class HealthRouter {
@Query()
ping() {
return 'pong';
}
}

Client usage: trpc.ping.query() (no namespace prefix).

Registration

Router classes must be registered as providers in a NestJS module:

@Module({
imports: [TrpcModule.forRoot({ path: '/trpc' })],
providers: [CatsRouter, UsersRouter, HealthRouter],
})
export class AppModule {}

The TrpcModule automatically discovers all classes decorated with @Router() via NestJS's DiscoveryService.

Dependency Injection

Routers are standard NestJS providers, so constructor injection works as expected:

@Router('cats')
class CatsRouter {
constructor(private readonly catsService: CatsService) {}

@Query()
list() {
return this.catsService.findAll();
}
}