Skip to content

Modules

A module is a class annotated with the @Module() decorator. Modules organize the application structure — each feature area has its own module.

Module Anatomy

typescript
import { Module } from 'next-js-backend';

@Module({
  imports: [DatabaseModule, SharedModule],   // Other modules to import
  controllers: [UserController],             // Request handlers
  providers: [UserService, UserRepository], // Injectable classes
  exports: [UserService],                   // Make available to other modules
})
export class UserModule {}

Options

OptionDescription
importsModules whose exported providers are available here
controllersControllers handled by this module
providersServices, repositories, etc. available in this module
exportsProviders shared with importing modules

Root Module

The root AppModule is the entry point:

typescript
@Module({
  imports: [
    UserModule,
    ProductModule,
    DatabaseModule,
    ConfigModule,
  ],
})
export class AppModule {}
typescript
const app = await ElysiaFactory.create(AppModule);

Feature Modules

Organize by domain:

src/
├── modules/
│   ├── users/
│   │   ├── users.module.ts
│   │   ├── users.controller.ts
│   │   ├── users.service.ts
│   │   └── users.repository.ts
│   ├── products/
│   └── orders/
└── app.module.ts

Shared Modules

Export providers for use across modules:

typescript
@Module({
  providers: [CryptoService],
  exports: [CryptoService],  // Other modules can use CryptoService
})
export class SharedModule {}

Dynamic Modules

Create modules with runtime configuration using static register() or forRoot() methods:

typescript
@Module({})
export class DatabaseModule {
  static register(options: DatabaseOptions): DynamicModule {
    return {
      module: DatabaseModule,
      providers: [
        { provide: 'DB_OPTIONS', useValue: options },
        DatabaseService,
      ],
      exports: [DatabaseService],
    };
  }
}
typescript
@Module({
  imports: [
    DatabaseModule.register({
      url: process.env.DATABASE_URL!,
      poolSize: 10,
    }),
  ],
})
export class AppModule {}

Built-in Modules

ModuleImport
ConfigModuleimport { ConfigModule } from 'next-js-backend'
JwtModuleimport { JwtModule } from 'next-js-backend'
SessionModuleimport { SessionModule } from 'next-js-backend'
CacheModuleimport { CacheModule } from 'next-js-backend'
CompressionModuleimport { CompressionModule } from 'next-js-backend'
ScheduleModuleimport { ScheduleModule } from 'next-js-backend'
EventEmitterModuleimport { EventEmitterModule } from 'next-js-backend'
AiModuleimport { AiModule } from 'next-js-backend'
DevModeModuleimport { DevModeModule } from 'next-js-backend'

Released under the MIT License.