Open ermal-abiti opened 1 year ago
@ermal-abiti you can disable class transformation in either the global settings of routing-controller or per parameter basis. Please take a look at the documentation and search for class-transformer
@attilaorosz attilaorosz I disabled:
useExpressServer(app, {
routePrefix: '/api',
validation: {
whitelist: true,
},
controllers: [AuthController],
defaultErrorHandler: true,
classTransformer: false,
});
But now it is not validating the body and it is not applying the whitelist: true
at validation options.
DTO:
export class RegisterDto {
@IsString()
username: string;
@IsString()
password: string;
}
And I am sending this json request body:
{
"username":"test",
"password:"test"
"name": "test"
}
And the console is outputing this:
{ username: 'test', password: 'test', name: 'test' }
Also if i remove one of the fields and i send this json for ex: {"username": "test"}
, it skips the validation part, so it doesn't throw an error or something. Shouldn't it validate based on the DTO ?
Any solution for this ?
Sorry for the late reply, do you happen to have a repro repo for this? I have no idea what @Serialize()
does in your example.
@attilaorosz @Serialize()
does not have to do with this.
I have
// index.js
...
useExpressServer(app, {
routePrefix: '/api',
validation: {
whitelist: true,
},
controllers: [AuthController],
defaultErrorHandler: true,
classTransformer: true,
});
...
// auth.controller.ts
@JsonController('/auth')
@Service()
export class AuthController {
constructor(private readonly authService: AuthService) {}
@Post('/register')
@HttpCode(201)
async registerUser (@Body() body: RegisterDto) {
console.log(body)
return this.authService.register(body);
}
}
The problem is at body
in /register
route. I want body
to a be plain object after validation, for example { username: 'test', password: 'test' }
. But by default body
after validation comes as RegisterDto { username: 'test', password: 'test' }
(instance of RegisterDto).
Otherwise if I set classTransformer: false
, the body
comes as plain object but it does not go through the validation process.
What i want to achieve is validate the body
and return it after validation as plain object { username: 'ermal1', password: 'dasd' }
.
Is there any specific option for this ?
Thanks for your response
I have this following code:
As you can see the controller is using validation. After I call the api endpoint, the console outputs
RegisterDto { username: 'test', password: 'test' }
.Coming from a nestjs perspective, it would automatically convert this dto instance to a plain object, and the console would output this
{ username: 'ermal1', password: 'dasd' }
.How can i achieve this using routing-controllers ?