nestjs
NestJS
Build server-side Node apps the way NestJS intends: feature modules, providers wired through the DI container, controllers, and a cross-cutting layer bound at a deliberate scope. This skill is about Nest-specific mechanics — how DI scopes resolve, what order the request lifecycle runs in, where to bind guards/pipes/interceptors/filters, and how to test it with Test.createTestingModule.
Not this — route instead
- Bare Express/Fastify/
httpservice, no@Module/@Injectable→../nodejs/SKILL.md. Nest starts the moment the DI container appears. - REST resource modeling, versioning, status codes, idempotency (framework-agnostic) →
../api-design/SKILL.md. Nest is where you implement those decisions. - Designing the schema / writing queries / migrations →
../prisma-orm/SKILL.md. Injecting a repo orDataSourceprovider stays here; designing the table does not. - Generic JS/TS test infra (Jest config, coverage thresholds, monorepo) →
../testing-web/SKILL.md. The Nest harness (TestingModule,overrideProvider, Supertest bootstrap) stays here.
Mental model
Everything is a provider in a directed DI graph. Modules draw the boundaries of that graph — a provider is only reachable where it is provided or imported. Cross-cutting concerns (guards, interceptors, pipes, filters) are decorators bound at a scope you choose: global, controller, or route. Get those three right and the rest is plumbing.
The request lifecycle runs in a fixed order. Memorize it — most "my guard can't see the validated body" bugs are an ordering misunderstanding: