如何为class-validator自定义装饰器设置默认错误消息?
问题:为class-validator的IsISO6391装饰器设置默认错误消息
我基于class-validator开发了IsISO6391装饰器,当用户使用该装饰器时,如果没有在validationOptions中定义message字段,约束校验会返回空字符串''作为错误信息。现有代码如下:
export function IsISO6391(validationOptions?: ValidationOptions) { return function (object: Object, propertyName: string) { registerDecorator({ name: 'IsISO6391', target: object.constructor, propertyName: propertyName, constraints: [], options: validationOptions, validator: { validate, } }); }; }
请问该如何为这个装饰器设置默认错误消息?
解决方案
你可以通过合并默认配置与传入的validationOptions来设置默认错误消息,核心逻辑是优先使用用户传入的message,若未传入则启用自定义默认值。具体修改如下:
export function IsISO6391(validationOptions?: ValidationOptions) { // 定义包含默认错误消息的基础配置 const defaultOptions: ValidationOptions = { message: '该字段必须是有效的ISO 639-1语言代码' }; // 合并默认配置与用户传入配置,用户配置会覆盖对应字段 const mergedOptions = { ...defaultOptions, ...validationOptions }; return function (object: Object, propertyName: string) { registerDecorator({ name: 'IsISO6391', target: object.constructor, propertyName: propertyName, constraints: [], options: mergedOptions, validator: { validate, } }); }; }
关键说明
- 先创建包含默认
message的defaultOptions对象,定义你期望的默认错误提示文本 - 使用对象展开运算符
...合并默认配置与用户传入的validationOptions,用户传入的配置会自动覆盖默认配置中的同名字段 - 将合并后的
mergedOptions传入registerDecorator的options参数
这样修改后,当用户未指定message时,校验会自动返回你设置的默认错误消息;如果用户传入了自定义message,则优先使用用户配置的内容。
内容的提问来源于stack exchange,提问作者Tiago Bértolo
相关产品推荐
相关产品推荐

