【发布时间】:2022-02-15 11:04:15
【问题描述】:
好像真的是脑中的痛...
github 和其他网站上有很多关于此的帖子,其中许多归结为使用“类验证器”中的 useContainer,但它对我不起作用。
async function bootstrap() {
const app = await NestFactory.create(ApplicationModule);
useContainer(app, { fallback: true });
await app.listen(3000);
}
bootstrap();
这是注射剂:
@ValidatorConstraint({ name: 'uniqueOnDatabase', async: true })
@Injectable()
export class UniqueOnDatabase implements ValidatorConstraintInterface {
constructor(
private readonly userService: UserService,
) {}
public async validate(val: any, args: ValidationArguments): Promise<boolean> {
const user = await this.userService.retrieveOneByEmail(val);
return !user;
}
public defaultMessage(args: ValidationArguments): string {
return `User with such an email address already exists in the DB`;
}
}
我只想在 UniqueOnDatabase 类中使用我的 userService。
这是我提供 UniqueOnDatabase 的模块:
import { Module, CacheModule } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { CacheConfigService } from 'src/config/cache/config.service';
import { CacheService } from './services/cache.service';
import { CodeGenService } from './services/code-gen.service';
import { UserExistanceValidationPipe } from './pipes/user-existance.validation.pipe';
import { UsersModule } from 'src/users/users.module';
import { UniqueOnDatabase } from './validators/unique-on-database.validator';
@Module({
providers: [
CacheService,
CodeGenService,
UniqueOnDatabase,
],
imports: [
CacheModule.registerAsync({
imports: [ConfigModule],
useClass: CacheConfigService,
}),
UsersModule,
],
exports: [
CacheService,
CodeGenService,
UniqueOnDatabase,
],
})
export class SharedModule {}
【问题讨论】:
-
它怎么不适合你?你得到一个特定的错误吗?它在开始时、构建时、运行时都不起作用吗?
-
@JayMcDoniel 例如,它会抛出以下错误
Nest could not find Validator element (this provider does not exist in the current context)。我从class-validator导入useContainer,然后在位于不同模块中的DTO 上使用UniqueOnDatabase。 -
@JayMcDoniel 验证器元素是什么意思?
-
你能展示你提供
UniqueOnDatabase验证器的模块吗? -
@JayMcDoniel Aaah,好像我已经找到了解决方案。我应该使用
useContainer(app.select(SharedModule), { fallbackOnErrors: true });而不是我一开始所做的......
标签: nestjs