javascript - როგორ შემიძლია ვიყო დეკორატორი კლასში მეთოდის ვარიანტისთვის NestJS-ში?
import {isNotEmpty} from "class-validator";
export Service {
create(createdto)
{
const {name,age} = createdto;
@isNotEmpty()
name //using decorator to check whether name is null or
undefined
}
}
ამიტომ, დეკორატორი მხოლოდ კლასი მეთოდებისთვის არის სასარგებლო, მე არ შემიძლია მისი გამოყენება მეთოდის ცვლადებში. როგორ შეუძლიათ მათ მეთოდის ცვლადების ვალიდაცია?
პასუხი #1
გათვალისწინებით, რომ ლოკალურ ცვლებებზე დეკორატორები ენის (ECMAScript2016/Typescript) მიერ მხარდაჭერილი არ არის, თქვენ ვერ გამოიყენებთ დეკორატორებს თქვენს სერვისში ისე, როგორც ეს აღწერილია კითხვაში.
მიუხედავად ამისა, class-validator სთავაზობს მისი ვალიდაციის ფუნქციებისთვის დეკორატორის გარეშე განხორციელებას.
Github-ზე class-validator-ის შესახებ: https://github.com/typestack/class-validator#manual-validation წერია:
ვალიდატორში არსებობს რამდენიმე მეთოდი, რომელიც საშუალებას გაძლევთ მოახდინოთ ვალიდაცია დეკორატორის გარეშე:
import { isEmpty, isBoolean } from 'class-validator';
isEmpty(value); isBoolean(value);
ამრიგად, იგივე მიზანს შეგიძლიათ მიაღწიოთ ასეთი კოდის გამოყენებით:
import { Injectable } from "@nestjs/common";
import { CreateDto } from "./dto/create.dto";
import { isEmpty, isInt } from "class-validator";
@Injectable()
export class TestValidationService {
test(createDto: CreateDto) {
const {name, age} = createDto;
if (isEmpty(name)) {
throw "There is no name.";
}
if (!isInt(age)) {
throw "Age is not int."
}
return createDto;
}
}
ბოლოს, თუ თქვენთვის მოსახერხებელი არ არის სერვისში ერთზე ერთის მეთოდის გამოყენება, თქვენ ჯერ კიდევ შეგიძლიათ დააკონფიგურიროთ თქვენი DTO და გამოიყენოთ validate მეთოდი class-validator-დან.
როგორც ეს:
import { IsInt, IsNotEmpty } from "class-validator";
export class CreateDto {
@IsNotEmpty()
name: string;
@IsInt()
age: number
}
და თქვენს სამსახურში:
async testWithValidate(createDto: CreateDto) {
const validationResult = await validate(createDto);
}
