как сделать поле обязательным в mongodb при вставке? - PullRequest
1 голос
/ 30 мая 2020

Я использую nestjs + mongodb с typeorm. Я хочу добавить проверку, что в поле name. name поле должно быть required. Поэтому он выдаст ошибку, если я попытаюсь добавьте blank string в mongodb. но это не дает мне ошибки. он добавил пустую строку в mongodb, почему?

Я создаю объект

export class BootcampEntity extends BaseEntity {
  @ObjectIdColumn() id: ObjectID;

  @IsNotEmpty()
  @Column('text',{nullable: false})
  name:string; 

вот так

в контроллере или репозитории, который я сохраняю как это

async createBootcamp(
    createBootcampDto: CreateBootcampDto,
  ): Promise<BootcampEntity> {
    const { name, description } = createBootcampDto;

    const camp = new BootcampEntity();
    camp.name = "";
  //  camp.description = description;

    try {
      await camp.save();
    } catch (error) {
      throw new InternalServerErrorException();
    }

camp.name = ""; Он добавляет жестко запрограммированный blank string. Он должен выдавать ошибку базы данных. но не давать никаких ошибок.

Я уже использовал {nullable: false}

1 Ответ

0 голосов
/ 30 мая 2020

Я думаю, вам не хватает метода validateOrReject

import {validateOrReject} from "class-validator";

async createBootcamp(createBootcampDto: CreateBootcampDto): Promise<BootcampEntity> {
    const { name, description } = createBootcampDto;

    const camp = new BootcampEntity();
    camp.name = "";

    const errors = await validateOrReject(camp);

    try {
      await camp.save();
    } catch (error) {
      throw new InternalServerErrorException();
    }
}

Если вы не хотите размещать его перед методом save, вы можете использовать хук BeforeInsert

class BootcampEntity {

  ...

  @BeforeInsert()
  async validate() {
    await validateOrReject(this);
  }
}
...