Skip to content

Commit 11574d6

Browse files
merge: show param name in BadRequestError
2 parents 68516cc + c59d3e4 commit 11574d6

File tree

2 files changed

+48
-2
lines changed

2 files changed

+48
-2
lines changed

src/ActionParameterHandler.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,11 +190,12 @@ export class ActionParameterHandler<T extends BaseDriver> {
190190
.catch((validationErrors: ValidationError[]) => {
191191
const error: any = new BadRequestError(`Invalid ${paramMetadata.type}, check 'errors' property for more info.`);
192192
error.errors = validationErrors;
193+
error.paramName = paramMetadata.name;
193194
throw error;
194195
});
195196
}
196197

197198
return value;
198199
}
199200

200-
}
201+
}

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

Lines changed: 46 additions & 1 deletion
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

211-
});
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+
});
256+
});

0 commit comments

Comments
 (0)