Skip to main content

Routers and Routes

Define a router

import { Router, Route } from '@nestjs-rpc/server';

@Router()
export class UserQueriesRouter {
@Route()
getUser({ id }: { id: string }) { /* ... */ }

@Route()
listUsers() { /* ... */ }
}

Register routers

import { defineAppRouter } from '@nestjs-rpc/server';
import { UserQueriesRouter } from './user.queries.router';

export const routes = defineAppRouter({
user: { queries: UserQueriesRouter },
});

Use the map in NestRPCModule.forRoot({ routes }). The dynamic controller validates that:

  • the final path segment is a router class decorated with @Router()
  • the method exists and is decorated with @Route()

Input param rule

The first parameter is reserved for the input and is injected automatically. Do not decorate it; decorating index 0 throws at runtime.

Client pathing follows your keys

The nested keys you choose define the access path on the client. For example:

export const routes = defineAppRouter({
app: AppRouter,
user: { queries: UserQueriesRouter },
});

Client calls:

rpc.app.batch1(123)
rpc.user.queries.getUser({ id: '1' })