Use TypeScript decorators to register express restful service. Node Express module: less code to run a server.
- express 4.19.2
- node 20
- typescript 5
- typedoc
npm install decor-express --save
in your server.ts file.
import { Server, Database } from 'express';
//LOAD YOUR CONTROLLERS
import './controllers';
try {
const database = new Database(process.env.DATABASE as string, process.env.NODE_ENV as string);
database.connect();
console.log('Database connected.');
} catch (error) {
console.log(error);
process.abort();
}
export = Server.create({
views: 'views',
public: 'public',
enableSession: true,
sessionSecret: process.env.DATABASE as string
});
Options Server.create(options)
- views - Template directory for hbs files
- public - public assets folder
- enableSession - Enable or disable session
- sessionSecret - unique secret key for session
- beforeRouteInjection (optional) - a callback function that runs before Route mounting
- afterRouteInjection (optional) - a callback function that runs after Route mounting
file controllers/UsersController.ts
import { Request, Response } from 'express';
import { Controller, Get, Post, Put, Delete, Patch, Middleware } from 'express';
@Controller('/users', middlewareExample)
export class UsersController {
static children: Array<IRouteParams> = []; /// required
@Middleware(anyMiddleware) /// single middleware
@Get('/')
index(req: Request, res: Response) {
res.json({
_id: '830493kdiei033-303939kfkdk',
name: 'User',
address: 'Siliguri'
});
}
@Middleware(anyMiddleware)
@Middleware(anotherMiddleware)
@Post('/')
oneUser(req: Request, res: Response) {
res.send('You are User');
}
}
More Decorators are described below
This is Class decorator
// without middleware
@Controller('/users')
class User {...}
// with one middleware
@Controller('/users', myMiddleware)
class User {...}
// with many middlewares
@Controller('/users', [myMiddleware, anotherMiddleware])
class User {...}
Method Decorator
// without middleware
@Controller('/users')
class User {
@Middleware(myMiddleware)
@Post('/')
create(req, res, next){...}
}
Method Decorator
// without middleware
@Controller('/users')
class User {
@Post('/')
create(req, res, next){...}
}
Method Decorator
// without middleware
@Controller('/users')
class User {
@Get('/')
create(req, res, next){...}
}
Method Decorator
// without middleware
@Controller('/users')
class User {
@Put('/')
create(req, res, next){...}
}
Method Decorator
// without middleware
@Controller('/users')
class User {
@Patch('/')
create(req, res, next){...}
}
Method Decorator
// without middleware
@Controller('/users')
class User {
@Delete('/')
create(req, res, next){...}
}