Skip to content

Commit 0d9ebae

Browse files
author
Aleksi Pekkala
committed
Merge
2 parents c408966 + f5f4ce1 commit 0d9ebae

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1490,7 +1490,7 @@ of usage.
14901490
14911491
## Release notes
14921492
1493-
See information about breaking changes and release notes [here](https://github.com/pleerock/routing-controllers/tree/master/doc/release-notes.md).
1493+
See information about breaking changes and release notes [here](CHANGELOG.md).
14941494
14951495
[1]: http://expressjs.com/
14961496
[2]: http://koajs.com/

src/ActionParameterHandler.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ export class ActionParameterHandler<T extends BaseDriver> {
191191
.catch((validationErrors: ValidationError[]) => {
192192
const error: any = new BadRequestError(`Invalid ${paramMetadata.type}, check 'errors' property for more info.`);
193193
error.errors = validationErrors;
194+
error.paramName = paramMetadata.name;
194195
throw error;
195196
});
196197
}

test/functional/class-validator-options.spec.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {Get} from "../../src/decorator/Get";
88
import {QueryParam} from "../../src/decorator/QueryParam";
99
import {ResponseClassTransformOptions} from "../../src/decorator/ResponseClassTransformOptions";
1010
import {RoutingControllersOptions} from "../../src/RoutingControllersOptions";
11+
1112
const chakram = require("chakram");
1213
const expect = chakram.expect;
1314

@@ -208,4 +209,48 @@ describe("parameters auto-validation", () => {
208209
});
209210
});
210211

212+
describe("should contain param name on validation failed", () => {
213+
214+
let requestFilter: any;
215+
beforeEach(() => {
216+
requestFilter = undefined;
217+
});
218+
219+
before(() => {
220+
getMetadataArgsStorage().reset();
221+
222+
@JsonController()
223+
class UserController {
224+
225+
@Get("/user")
226+
getUsers(@QueryParam("filter") filter: UserFilter): any {
227+
requestFilter = filter;
228+
const user = new UserModel();
229+
user.id = 1;
230+
user._firstName = "Umed";
231+
user._lastName = "Khudoiberdiev";
232+
return user;
233+
}
234+
}
235+
});
236+
237+
const options: RoutingControllersOptions = {
238+
validation: true
239+
};
240+
241+
let expressApp: any, koaApp: any;
242+
before(done => expressApp = createExpressServer(options).listen(3001, done));
243+
after(done => expressApp.close(done));
244+
before(done => koaApp = createKoaServer(options).listen(3002, done));
245+
after(done => koaApp.close(done));
246+
247+
const invalidFilter = {
248+
keyword: "aa"
249+
};
250+
251+
assertRequest([3001, 3002], "get", `user?filter=${JSON.stringify(invalidFilter)}`, response => {
252+
expect(response).to.have.status(400);
253+
expect(response.body.paramName).to.equal("filter");
254+
});
255+
});
211256
});

0 commit comments

Comments
 (0)