因此,我获得了一个用户实体 (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)。但我收到以下错误:
{
"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/