在我的 API 中考虑这个端点:
@Post('/convert')
@UseInterceptors(FileInterceptor('image'))
convert(
@UploadedFile() image: any,
@Body(
new ValidationPipe({
validationError: {
target: false,
},
// this is set to true so the validator will return a class-based payload
transform: true,
// this is set because the validator needs a tranformed payload into a class-based
// object, otherwise nothing will be validated
transformOptions: { enableImplicitConversion: true },
}),
)
parameters: Parameters,
) {
return this.converterService.start(image, parameters);
}
设置为parameters
参数的请求正文包含一个称为布尔类型的属性,它在参数 DTOlaserMode
上像这样进行验证:
@IsDefined()
@IsBoolean()
public laserMode: boolean;
现在奇怪的是,当从 PostMan 发送请求时:
laserMode = false
laserMode = cool
(布尔值以外的字符串)
我注意到它laserMode
总是设置为 true,这是在验证过程完成之后,因为当我console.log类的构造函数中的 Parameter 实例时
export class Parameters {
...
constructor() {
console.log('this :', this);
}
...
}
没看到楼盘!
注意:当
laserMode
从请求中删除时,返回预期的验证错误(应该定义,应该是布尔值)。
// the logged instance 'this' in the constructor
this : Parameters {
toolDiameter: 1,
sensitivity: 0.95,
scaleAxes: 200,
deepStep: -1,
whiteZ: 0,
blackZ: -2,
safeZ: 2,
workFeedRate: 3000,
idleFeedRate: 1200,
laserPowerOn: 'M04',
laserPowerOff: 'M05',
invest: Invest { x: false, y: true }
}
// the logged laserMode value in the endpoint handler in the controller
parameters.laserMode in controller : true
// the logged laser value from the service
parameters.laserMode in service : true
- 检查拼写错误
- 使用 Vue 应用程序而不是邮递员时会注意到相同的结果。所以!!?