0.0.3 • Published 4 years ago
@capujs/framework
A framework build declarative and beautifully organizated based in class controllers with decorators usage in Express.js
Installation
Install with yarn
yarn add @capujs/framework
#install types
yarn -D add @types/express
yarn -D add @types/cors
Its important enable decorators in you project tsconfig.json
{
	"emitDecoratorMetadata": true,
	"experimentalDecorators": true
}
Example of usage
- Create file 
ExampleController.ts 
import { Controller, Get } from "@capujs/framework";
@Controller("/example")
export class ExampleController {
	@Get("/")
	testMethod() {
		return "Hello Word";
	}
}
- Create app.ts
 
import { createServer} from '@capujs/framework';
import { ExampleController } from './ExampleController';
const app = createServer({
   controllers [ExampleController ]
});
//Listen express
const PORT = 3000;
app.listen(PORT,()=> console.log(`Server ready on port ${PORT}`);
Decorators Reference
Controllers
| Decorator | Example | Description | 
|---|
@Controller(prefix?: string) | @Controller("/test") class TestController | Register class with this decorator a registred as controller and its anotated methods are registred. it using express `res.send() | 
Methods for Controllers
| Decorator | Example | Description | 
|---|
@Get(path?:string) | @Get('/users') all() | Method marked with this decorator register a request with GET method | 
@Post(path?:string) | @Post('/users') save() | Method marked with this decorator register a request with POST method | 
@Put(path?:string) | @Put('/users/:id') update() | Method marked with this decorator register a request with PUT method | 
@Patch(path?:string) | @Patch('/users/:id') update() | Method marked with this decorator register a request with PATCH method | 
@Delete(path?:string) | @Delete('/users/:id') remove() | Method marked with this decorator register a request with DELETE method | 
@Head(path?:string) | @Head('/users/:id') head() | Method marked with this decorator register a request with HEAD method | 
@All(path?:string) | @All('/users/:id') all() | Method marked with this decorator register a request with ALL method | 
@Options(path?:string) | @Options('/users/:id') all() | Method marked with this decorator register a request with OPTIONS method | 
Decorators for Parameters (inject in methods)
| Decorator | Example | Description | 
|---|
@Body(options?:IParamOptions) | save(@Body() data: CustomDto) | Inject a body an parameters options can using bodyParser middleware. using req.body | 
@BodyParam(name:string, options?:IParamOptions) | save(@BodyParam('name') name:string) | Inject a body an parameters options can using bodyParser middleware. using req.body.name | 
@Params() | get(@Params() params: any) | Inject all parameters req.params | 
@Param(name:string, options?:IParamOptions) | get(@Param('id') id: string) | Inject a query parameter req.params.id | 
@HeaderParams() | get(@HeaderParams() params: any) | Inject all parameters req.headers | 
@HeaderParam(name:string, options?:IParamOptions) | get(@HeaderParam("authorization") authorization: string) | Inject a header parameter req.headers.authorization | 
@CookieParams() | get(@Cookies( cookies: any) | Inject all cookies parameter req.cookies | 
@CookieParam(name:string, options?:IParamOptions) | get(@Cookie("token") token: string) | Inject a cookie parameter req.cookies.token | 
@UploadFiles(name:string, options?:IUploadOptions) | post(@UploadFiles("photos") photos: any[]) | Inject multiple upload files from parameter req.files using middleware express-fileupload | 
@UploadFile(name:string, options?:IUploadOptions) | post(@UploadFile("photo") photo: any) | Inject single upload file from parameter req.files using middleware express-fileupload | 
Decorators for Middlewares
| Decorator | Example | Description | 
|---|
@Use(...middleware: RequestHandler[]) | @Use(isAuthenticated) class ProfileController | Register global middleware. | 
Decorators on Response
| Decorator | Example | Description | 
|---|
@HttpCode(code: number) | @HttpCode(201) signup() | Set custom http code after executing successfuly | 
@OnNull(codeOrError: number           | Error) | @OnNull(200) get() | Set a http code when controller return a null | 
@OnUndefined(codeOrError: number      | Error) | @OnNull(200) get() | Set a http code when controller return a undefined | 
@Header(name: string, value: string) | @Header('Authorization','some-token') profile() | Set a http header after executing successfuly |