Nest JS服务层调用Axios请求Facebook API返回null问题排查
NestJS中Axios请求Service返回null问题修复
问题根因
你的代码一共有4处核心编写错误:
- 变量未正确赋值:你在方法开头定义了初始值为null的
response变量,但axios请求的返回结果从未赋值给这个变量。.then()回调里的return res.data只是将值传递给Promise链的后续环节,不会修改外部的response变量,因此最后返回的始终是初始值null。 - 存在不可达的死代码:你在
.then()回调中把console.log(res.data)写在了return res.data之后,return语句执行后回调函数会直接退出,这行打印逻辑永远不会执行。 - Controller层未返回执行结果:Controller的
getCampaign方法仅调用了Service方法,没有将执行结果return给Nest框架,即使Service返回正确,接口也会给客户端返回空响应。 - 异常处理逻辑不规范:
.catch()中直接return错误对象会把异常当成正常业务结果返回,不会触发Nest自带的异常处理机制,容易导致前端响应格式异常。
修正后代码
Service层代码(推荐直接使用async/await写法,避免和.then/.catch混用导致逻辑混乱)
async readCampaign(dto: ParamCampaignDto) { try { const res = await axios.get(`https://graph.facebook.com/v14.0/act_${dto.accountId}/campaigns?access_token=${dto.accessToken}`) console.log(res.data) return res.data } catch (err) { // 可根据业务需求抛出对应Nest标准异常,例如throw new BadRequestException('拉取广告数据失败') throw err } }
Controller层代码
@Get() async getCampaign(@Query() dto: ParamCampaignDto) { return this.adsService.readCampaign(dto) }
优化提示:NestJS本身内置了基于Axios封装的HttpModule,在Nest项目中优先使用内置模块做HTTP请求,更适配框架的拦截器、异常过滤器等能力。
内容的提问来源于stack exchange,提问作者Muhamad Iqbal
相关产品推荐
相关产品推荐

