web-dev-qa-db-ja.com

class-validatorを使用してnestjsのバリデータ制約インターフェースにサービスを注入する方法は?

ユーザーサービスをバリデーターの制約インターフェイスに挿入しようとしていますが、うまくいかないようです。

import { ValidatorConstraintInterface, ValidatorConstraint, ValidationArguments, registerDecorator, ValidationOptions } from "class-validator";
import { UsersService } from './users.service';

@ValidatorConstraint({ async: true })
export class IsEmailAlreadyInUseConstraint implements ValidatorConstraintInterface {
    constructor(private usersService: UsersService) {
        console.log(this.usersService);
    }
    validate(email: any, args: ValidationArguments) {
        return this.usersService.findUserByEmail(email).then(user => {
             if (user) return false;
             return true;
        });
        return false;
    }

}

しかし、usersServiceがnullに記録されているため、そのメソッドにアクセスできません。

この問題についての洞察はありますか?

4
Dina Flies

Nestアプリケーションを使用してすべての場所で依存性注入を許可するには、_class-validator_のコンテナを更新する必要があります。 このGitHubの問題 はそれを行う方法を説明し、人々がそれに直面したいくつかの苦労をします。

リンクを読まないで簡単に修正:

_async function bootstrap() {
  const app = await NestFactory.create(ApplicationModule);
  useContainer(app, { fallback: true });
  await app.listen(3000);
}
bootstrap();
_

これを行うときは、通常のネストと同じようにバリデーターも登録してください@Injectable()

0
Jay McDoniel