mysql - @Get Controller 和 bool 查询内的 NestJS 验证失败(需要数字字符串)

标签 mysql vue.js nestjs

因此,我获得了一个用户实体 (Benutzer),并且只想获得那些作为主管 (Vorgesetzter) 的用户。因此我实现了一个名为“getAllVorgesetzten”的服务。

用户实体如下所示:

@Entity()
export class Benutzer {
@PrimaryGeneratedColumn({ type: "int" })
BenutzerID: number;

@Column({ type: "varchar", length: 50})
Benutzername: string;

@Column({ type: "varchar", length: 50})
Passwort: string;

@Column()
istAdmin: boolean;

@Column()
istVorgesetzter: boolean;

@Column({ type: "varchar", length: 50})
Vorgesetzter: string;

@Column({ type: "varchar", length: 50})
Vorname: string;

@Column({ type: "varchar", length: 50})
Nachname: string;

@Column()
Geburtsdatum: Date;

@Column({ type: "varchar", length: 50})
Email: string;

@Column()
Eintrittsdatum: Date;

@ManyToOne(() => Arbeitstage, arbeitstage => arbeitstage.allebenutzer)
arbeitstage: Arbeitstage;

@ManyToOne(() => Bundesland, bundesland => bundesland.alleBenutzer)
bundesland: Bundesland;

@OneToMany(() => Urlaubsantrag, urlaubsantrag => urlaubsantrag.benutzer)
anträge: Urlaubsantrag[];
}

用户服务的实现如下:

@Injectable()
export class BenutzerService {
constructor(
    @InjectRepository(Benutzer)
    private benutzerRepository: Repository<Benutzer>,
  ) {}

  getAllBenutzer(): Promise<Benutzer[]> {
    return this.benutzerRepository.find({ relations: ['bundesland', 'arbeitstage', 'anträge']});
  }

  findBenutzerByID(id: number): Promise<Benutzer> {
    return this.benutzerRepository.findOne(id, { relations: ['bundesland','arbeitstage','anträge']});
  }

  getAllVorgesetzten(istVorgesetzter: boolean): Promise<Benutzer[]>{
    return this.benutzerRepository.find({ where: {istVorgesetzter: istVorgesetzter} });
  }

  async createBenutzer(benutzer: CreateBenutzer) {
    const nutzer = this.benutzerRepository.create(benutzer);
    await this.benutzerRepository.save(benutzer);
    return nutzer;
  }

  async updateBenutzer(benutzer: UpdateBenutzer): Promise<UpdateResult> {
    return await this.benutzerRepository.update(benutzer.BenutzerID, benutzer);
  }

  async deleteBenutzer(id: number): Promise<DeleteResult> {
    return await this.benutzerRepository.findOne(id).then((value) => {
      return this.benutzerRepository.delete(value);
    });
  }
}

Controller 看起来像:

@Controller('benutzer')
export class BenutzerController {
constructor(private readonly benutzerService: BenutzerService) {}

@Post()
async createBenutzer(@Body() createBenutzer: CreateBenutzer): Promise<Benutzer> {
return this.benutzerService.createBenutzer(createBenutzer);
}

@Get()
async getBenutzer(): Promise<Benutzer[]> {
    return this.benutzerService.getAllBenutzer();
}

@Get(':id')
async getBenutzerByID(@Param('id', new ParseIntPipe()) id): Promise<Benutzer> {
    return this.benutzerService.findBenutzerByID(id);
}

@Get('/vorgesetzter')
async getAllVorgesetzten(@Query('istVorgesetzter', new ParseBoolPipe()) istVorgesetzter: boolean): Promise<Benutzer[]>{
  console.log(istVorgesetzter);
  return this.benutzerService.getAllVorgesetzten(istVorgesetzter);
}

@Patch()
async update(@Body() updateBenutzer: UpdateBenutzer) {
return this.benutzerService.updateBenutzer(updateBenutzer);
}
@Delete(':id')
async remove(@Param('id', new ParseIntPipe()) id) {
return this.benutzerService.deleteBenutzer(id);

} }

所以我有像http://localhost:3000/benutzer/vorgesetzter?istVorgesetzter=true这样的请求方法,并且想要获取istVorgesetzter = true的所有用户(benutzer)。但我收到以下错误:

error in swagger

   {
   "statusCode": 400,
   "message": "Validation failed (numeric string is expected)",
   "error": "Bad Request"
   }

最佳答案

这里的顺序很重要,@Get('/vorgesetzter') 应在 @Get(':id') 之前实现。通过该请求,您使用以下字符串调用 this.benutzerService.findBenutzerByID(id);:vorgesetzter?istVorgesetzter=true 收到您描述的错误。

这就是express的实现方式,NestJS遵循相同的行为:expressjs/express#2235 , nestjs/nest#995

关于mysql - @Get Controller 和 bool 查询内的 NestJS 验证失败(需要数字字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65012994/

相关文章:

php - 如何防止 cronjob foreach 循环向每个结果行发送电子邮件?

mysql 在使用 group by 和 where 条件时忽略 NULL

firebase - 使用 VueFire 从 Firebase 获取 .key

javascript - VueJS v-for 渲染列表,尽管 v-if 评估为 false

mongodb - 使用 mongoose 并利用我已经定义的 schmas 在 NestJS 中做种子 mongoDB 的正确方法是什么

mysql - 是否可以跨多个表创建唯一(索引)约束?

mysql - 选择包含一个词的条目

events - Vue中如何在 “v-html”绑定(bind)点击事件

postgresql - 使用 Between 查询 api Repository Typeorm 上的日期

mongodb - 如何使用 jest 监视 mongoose 的 Schema.virtual?