Comments (4)
there is an option called dismissDefaultMessages you can specify into your validate method:
validator.validate(model, { dismissDefaultMessages: true })
from class-validator.
gottcha. but what I was looking for was how to specify a default message in a custom validator. for example
export function IsLongerThan(property: string, validationOptions?: ValidationOptions) {
return function (object: Object, propertyName: string) {
registerDecorator({
name: "isLongerThan",
target: object.constructor,
propertyName: propertyName,
options: validationOptions,
message: "here is the defualt message when 'message is not defined on the annotation itself'"
validator: {
validate(value: any, args: ValidationArguments) {
const [relatedPropertyName] = args.constraints;
const relatedValue = (args.object as any)[relatedPropertyName];
return typeof value === "string" &&
typeof relatedValue === "string" &&
value.length > relatedValue.length; // you can return a Promise<boolean> here as well, if you want to make async validation
}
}
});
};
}
The use case would be if I have an annotation for validating 1 < X < 10, I can say in the custom annotation definition "value must be between 1 and 10" instead of having to repeat the text in the annotation decorator.
ie
@IsLongerThan("title", {
message: "Text must be longer than the title"
})
from class-validator.
@jerradpatch I just ran into this and was able to solve it by using a class validator as described here. Below is an example. If you would like to use just a decorator, then I assume the object you pass to validator
just needs the defaultMessage(args: ValidationArguments)
method implemented.
import { registerDecorator, ValidatorConstraint, ValidatorConstraintInterface, ValidationOptions, ValidationArguments } from 'class-validator';
@ValidatorConstraint({ name: 'matchesProperty', async: false })
export class MatchesPropertyConstraint implements ValidatorConstraintInterface {
public validate(value: string, args: ValidationArguments) {
const [relatedPropertyName] = args.constraints;
const relatedValue = (args.object as any)[relatedPropertyName];
return typeof value === typeof relatedValue &&
value === relatedValue;
}
public defaultMessage(args: ValidationArguments) { // Set the default error message here
const [relatedPropertyName] = args.constraints;
return `$property must match ${relatedPropertyName} exactly`;
}
}
export function MatchesProperty(property: string, validationOptions?: ValidationOptions) {
return (object: Object, propertyName: string) => {
registerDecorator({
name: 'matchesProperty',
target: object.constructor,
propertyName,
constraints: [property],
options: validationOptions,
validator: MatchesPropertyConstraint
});
};
}
from class-validator.
I am going to close this as @patrickhousley already showed the correct solution.
from class-validator.
Related Issues (20)
- feature: add @IsTime HOT 3
- always: false doesn't take any effect
- question: How annotations are inherited ? HOT 1
- question: How can I validate a union of strings? HOT 1
- fix: @IsDateString() accepts wrong date format HOT 2
- fix: Cannot find namespace 'ValidatorJS' in 0.14.x HOT 8
- question: Could someone also bump the package.json version from 0.14.0 to 0.14.1? HOT 5
- fix: options for @IsBase64 decorator are ignored HOT 1
- docs: add changelog for 0.14.1
- Class-level validators
- question: How do I set a default error message for my decorator? HOT 2
- question: Default definition "strong password" is unclear HOT 3
- question: isPhoneNumber validation input without country code HOT 1
- question: nested validation but discriminated depending on a field value in the root dto HOT 3
- feature: return promise from validation only if necessary and validate sync if possible
- fix: Typo in MaxDate comment HOT 2
- question: get constrains in decorators and not the message HOT 1
- fix please: class level decorator makes bug HOT 2
- feature: add `@IsVatId()` decorator HOT 1
- Please add a JavaScript verification decorator item
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from class-validator.