mysql - @Get 控制器和布尔查询中的 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('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 这样的请求方法,并且想要获取所有用户(benutzer),其中 istVorgesetzter = true。但我收到以下错误:
{
"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
推荐阅读
- javascript - 为什么 app.use(fn, '/api/auth', require('./routes/auth.routes')) 错误?
- java - 如何以编程方式设置 RelativeLayout 的 layout_constraintTop_toBottomOf “父级”?(安卓)
- javascript - SyntaxError: Unexpected token < in JSON at position 0 如何解决
- c++ - 为什么 C++ 类构造函数参数不允许具有与类属性相同的标识符?
- python - 在 Jupyter 笔记本环境中使用“地图”对象
- python-3.x - 使用条件 Python 在列表中拆分字符串
- node.js - 如何在@get 端点中执行分页
- c# - c# 中的引用标识是什么?
- javascript - 测试 JS 时为事件模拟对象
- php - 如何在 php 中修复数组中的 Foreach 数组以返回结果