NestJs在自定义验证器(类验证器)中获取请求实例或执行上下文

时间:2018-09-13 16:04:55

标签: nestjs class-validator

是否可以在nestJs中注入执行上下文或访问当前请求(类验证器=>定制验证器)?

import { ValidatorConstraint, ValidatorConstraintInterface, ValidationArguments } from 'class-validator';
import { Injectable } from '@nestjs/common';
import { Connection } from 'typeorm';
import { InjectConnection } from '@nestjs/typeorm';

@ValidatorConstraint({ name: 'modelExistsConstraint', async: true })
@Injectable()
export class ModelExistsConstraint implements ValidatorConstraintInterface {

  constructor(
    @InjectConnection('default') private readonly connection: Connection,
  ) {
  }

  async validate(value: string, validationArguments: ValidationArguments) {
    // here need request or execution context;
    // const test = this.context.switchToHttp().getRequest();
    const model = await this.connection
      .getRepository(validationArguments.constraints[0])
      .findOne({ where: { [validationArguments.property]: value } });
    return !model;
  }

  defaultMessage(args: ValidationArguments) {
    return `Model with "${args.property}" - "${args.value}" already exists`;
  }
}

0 个答案:

没有答案