Skip to content

Commit 9f93e3a

Browse files
authored
Merge pull request #209 from chaowlert/defaults
allow default options
2 parents 2765a22 + 33cb5ea commit 9f93e3a

16 files changed

+241
-46
lines changed

README.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ You can use routing-controllers with [express.js][1] or [koa.js][2].
4141
- [Render templates](#render-templates)
4242
- [Throw HTTP errors](#throw-http-errors)
4343
- [Enable CORS](#enable-cors)
44+
- [Default settings](#default-settings)
4445
* [Using middlewares](#using-middlewares)
4546
+ [Use exist middleware](#use-exist-middleware)
4647
+ [Creating your own express middleware](#creating-your-own-express-middleware)
@@ -728,6 +729,34 @@ const app = createExpressServer({
728729
app.listen(3000);
729730
```
730731

732+
#### Default settings
733+
734+
You can override default status code in routing-controllers options.
735+
736+
```typescript
737+
import "reflect-metadata";
738+
import {createExpressServer} from "routing-controllers";
739+
import {UserController} from "./UserController";
740+
741+
const app = createExpressServer({
742+
defaults: {
743+
744+
//with this option, null will return 404 by default
745+
nullResultCode: 404,
746+
747+
//with this option, void or Promise<void> will return 204 by default
748+
undefinedResultCode: 204,
749+
750+
paramOptions: {
751+
//with this option, argument will be required by default
752+
required: true
753+
}
754+
}
755+
});
756+
757+
app.listen(3000);
758+
```
759+
731760
## Using middlewares
732761

733762
You can use any exist express / koa middleware, or create your own.

src/RoutingControllers.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
import {ActionParameterHandler} from "./ActionParameterHandler";
2-
import {MetadataBuilder} from "./metadata-builder/MetadataBuilder";
3-
import {ActionMetadata} from "./metadata/ActionMetadata";
41
import {Action} from "./Action";
2+
import {ActionMetadata} from "./metadata/ActionMetadata";
3+
import {ActionParameterHandler} from "./ActionParameterHandler";
54
import {Driver} from "./driver/Driver";
6-
import {isPromiseLike} from "./util/isPromiseLike";
7-
import {runInSequence} from "./util/runInSequence";
5+
import {InterceptorInterface} from "./InterceptorInterface";
86
import {InterceptorMetadata} from "./metadata/InterceptorMetadata";
7+
import {MetadataBuilder} from "./metadata-builder/MetadataBuilder";
8+
import { RoutingControllersOptions } from "./RoutingControllersOptions";
99
import {getFromContainer} from "./container";
10-
import {InterceptorInterface} from "./InterceptorInterface";
10+
import {isPromiseLike} from "./util/isPromiseLike";
11+
import {runInSequence} from "./util/runInSequence";
1112

1213
/**
1314
* Registers controllers and middlewares in the given server framework.
@@ -37,9 +38,9 @@ export class RoutingControllers {
3738
// Constructor
3839
// -------------------------------------------------------------------------
3940

40-
constructor(private driver: Driver) {
41+
constructor(private driver: Driver, private options: RoutingControllersOptions) {
4142
this.parameterHandler = new ActionParameterHandler(driver);
42-
this.metadataBuilder = new MetadataBuilder();
43+
this.metadataBuilder = new MetadataBuilder(options);
4344
}
4445

4546
// -------------------------------------------------------------------------

src/RoutingControllersOptions.ts

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import {ClassTransformOptions} from "class-transformer";
2-
import {ValidatorOptions} from "class-validator";
31
import {AuthorizationChecker} from "./AuthorizationChecker";
2+
import {ClassTransformOptions} from "class-transformer";
43
import {CurrentUserChecker} from "./CurrentUserChecker";
4+
import { ParamOptions } from "./decorator-options/ParamOptions";
5+
import {ValidatorOptions} from "class-validator";
56

67
/**
78
* Routing controller initialization options.
@@ -85,4 +86,28 @@ export interface RoutingControllersOptions {
8586
*/
8687
currentUserChecker?: CurrentUserChecker;
8788

89+
/**
90+
* Default settings
91+
*/
92+
defaults?: {
93+
/**
94+
* If set, all null responses will return specified status code by default
95+
*/
96+
nullResultCode?: number;
97+
98+
/**
99+
* If set, all undefined responses will return specified status code by default
100+
*/
101+
undefinedResultCode?: number;
102+
103+
/**
104+
* Default param options
105+
*/
106+
paramOptions?: {
107+
/**
108+
* If true, all non-set parameters will be required by default
109+
*/
110+
required?: boolean;
111+
};
112+
};
88113
}

src/decorator/Body.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export function Body(options?: BodyOptions): Function {
1313
method: methodName,
1414
index: index,
1515
parse: false,
16-
required: options ? options.required : false,
16+
required: options ? options.required : undefined,
1717
classTransform: options ? options.transform : undefined,
1818
validate: options ? options.validate : undefined,
1919
explicitType: options ? options.type : undefined,

src/decorator/BodyParam.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import {getMetadataArgsStorage} from "../index";
21
import {ParamOptions} from "../decorator-options/ParamOptions";
2+
import {getMetadataArgsStorage} from "../index";
33

44
/**
55
* Takes partial data of the request body.
@@ -14,7 +14,7 @@ export function BodyParam(name: string, options?: ParamOptions): Function {
1414
index: index,
1515
name: name,
1616
parse: options ? options.parse : false,
17-
required: options ? options.required : false,
17+
required: options ? options.required : undefined,
1818
explicitType: options ? options.type : undefined,
1919
classTransform: options ? options.transform : undefined,
2020
validate: options ? options.validate : undefined

src/decorator/CookieParam.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import {getMetadataArgsStorage} from "../index";
21
import {ParamOptions} from "../decorator-options/ParamOptions";
2+
import {getMetadataArgsStorage} from "../index";
33

44
/**
55
* Injects a request's cookie value to the controller action parameter.
@@ -14,7 +14,7 @@ export function CookieParam(name: string, options?: ParamOptions) {
1414
index: index,
1515
name: name,
1616
parse: options ? options.parse : false,
17-
required: options ? options.required : false,
17+
required: options ? options.required : undefined,
1818
explicitType: options ? options.type : undefined,
1919
classTransform: options ? options.transform : undefined,
2020
validate: options ? options.validate : undefined

src/decorator/CurrentUser.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export function CurrentUser(options?: { required?: boolean }) {
1212
method: methodName,
1313
index: index,
1414
parse: false,
15-
required: options ? options.required : false
15+
required: options ? options.required : undefined
1616
});
1717
};
1818
}

src/decorator/HeaderParam.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import {getMetadataArgsStorage} from "../index";
21
import {ParamOptions} from "../decorator-options/ParamOptions";
2+
import {getMetadataArgsStorage} from "../index";
33

44
/**
55
* Injects a request's http header value to the controller action parameter.
@@ -14,7 +14,7 @@ export function HeaderParam(name: string, options?: ParamOptions): Function {
1414
index: index,
1515
name: name,
1616
parse: options ? options.parse : false,
17-
required: options ? options.required : false,
17+
required: options ? options.required : undefined,
1818
classTransform: options ? options.transform : undefined,
1919
explicitType: options ? options.type : undefined,
2020
validate: options ? options.validate : undefined

src/decorator/QueryParam.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import {getMetadataArgsStorage} from "../index";
21
import {ParamOptions} from "../decorator-options/ParamOptions";
2+
import {getMetadataArgsStorage} from "../index";
33

44
/**
55
* Injects a request's query parameter value to the controller action parameter.
@@ -14,7 +14,7 @@ export function QueryParam(name: string, options?: ParamOptions): Function {
1414
index: index,
1515
name: name,
1616
parse: options ? options.parse : false,
17-
required: options ? options.required : false,
17+
required: options ? options.required : undefined,
1818
classTransform: options ? options.transform : undefined,
1919
explicitType: options ? options.type : undefined,
2020
validate: options ? options.validate : undefined

src/decorator/Session.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import { getMetadataArgsStorage } from "../index";
21
import { ParamOptions } from "../decorator-options/ParamOptions";
3-
2+
import { getMetadataArgsStorage } from "../index";
43

54
/**
65
* Injects a Session object to the controller action parameter.

0 commit comments

Comments
 (0)