Skip to content
On this page

Decorators - Controller

@Controller is a main decorator for your controller class. It defines your class as controller and lets you configure the routes.

Controller Options

path - The main path of your routes.

This property sets where your routes will be requested. Example from vanilla express:

ts
import express, { Router } from 'express';

const app = express();

const router = new Router();
router.get('/', (req, res) => ...);

app.use('/test', router); // `/test` is the path 

middlewares - Array of middlewares that you want to use.

You can add your middlewares that you want to run at all routes of the controller to this array. Example from vanilla express:

ts
import express, { RequestHandler, Router } from 'express';

const app = express();
const router = new Router();

// This is your middleware and you can add this to `middlewares` array.
// Example: `middlewares: [middleware]`
const middleware: RequestHandler = (req, res, next) => {
    console.log('Middleware triggered');
    next();
};

app.use('/myPath', middleware, router);

Creating a Controller

Controller is a Router from vanilla express basically and you need to create a controller to run your routes.

Basic Example

ts
import { Controller } from '@burakbey/express-class-router';

@Controller({
    path: '/users'
})
export default class UserController {
    ...
}

With Middlewares

CheckAuth middleware will be called on all routes.

ts
import { Controller } from '@burakbey/express-class-router';
import { CheckAuth } from '../middlewares/CheckAuth';

@Controller({
    path: '/users',
    middlewares: [CheckAuth]
})
export default class UserController {
    ...
}

Important Rules About Controllers

  • Controller class must exported as default.
ts
import { Controller } from '@burakbey/express-class-router';

@Controller({
    path: '/users'
})
export default class UserController {
    ...
}
ts
import { Controller } from '@burakbey/express-class-router';

@Controller({
    path: '/users'
})
export class UserController {
    ...
}
  • All controllers must have at least one route.
ts
import { Controller } from '@burakbey/express-class-router';
import { Request, Response } from 'express';

@Controller({
    path: '/users'
})
export default class UserController {
    @Route({
        path: '/',
        method: 'get'
    })
    async getUsers(req: Request, res: Response) {
        ...
    }
}
ts
import { Controller } from '@burakbey/express-class-router';

@Controller({
    path: '/users'
})
export class UserController {
    randomFunction() {
        // This function is not a route because
        // you have to use `@Route` decorator
    }
}