You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复NestJS中调用API时出现的400 Bad Request错误

解决NestJS接口返回400 Bad Request的问题

针对你提供的代码,400错误大概率是请求参数验证失败导致的,以下是具体排查和解决方法:

1. 检查请求参数是否正确传递

你的接口要求organisationId作为Query参数,且必须是整数。如果请求时:

  • 没有携带organisationId参数
  • 参数值不是有效整数(比如字符串、小数、空值)

都会触发ParseIntPipe的验证失败,返回400错误。

解决方式:
确保请求URL格式正确,例如:

GET /reviews-with-answers?organisationId=123

其中123是有效的整数值。

2. 处理参数可选的场景(如果需要)

如果允许organisationId可选,需要添加@Optional()装饰器,并在代码中处理参数为空的情况:

import { Optional, BadRequestException } from '@nestjs/common';

@Roles(Role.Supplier)
@Get("reviews-with-answers")
async getAllReviewsWithAnswers(
  @Optional() @Query("organisationId", ParseIntPipe) organisationId?: number,
) {
  if (!organisationId) {
    throw new BadRequestException('必须提供有效的organisationId整数参数');
  }
  return this.reviewService.getAllReviewsWithAnswers(organisationId);
}

3. 自定义参数验证错误信息

默认的ParseIntPipe错误信息不够明确,可以自定义异常提示,方便排查问题:

import { ParseIntPipe, HttpStatus, BadRequestException } from '@nestjs/common';

@Roles(Role.Supplier)
@Get("reviews-with-answers")
async getAllReviewsWithAnswers(
  @Query("organisationId", new ParseIntPipe({
    exceptionFactory: (error) => new BadRequestException(`参数organisationId格式错误: ${error}`),
    errorHttpStatusCode: HttpStatus.BAD_REQUEST,
  })) organisationId: number,
) {
  return this.reviewService.getAllReviewsWithAnswers(organisationId);
}

4. 排查权限守卫的潜在问题

虽然400错误通常和参数相关,但如果@Roles装饰器的守卫实现存在逻辑错误(比如错误解析权限信息导致请求被判定为无效),也可能返回400。可以临时注释@Roles(Role.Supplier)装饰器,测试接口是否正常响应,以此排除权限守卫的问题。


内容的提问来源于stack exchange,提问作者Muhammad Deo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 21:12:12