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

NestJS 结合 gRPC 调用认证微服务返回空对象问题求助

问题核心原因

NestJS gRPC客户端调用返回的是RxJS Observable对象,HTTP接口直接返回该对象时无法被正确序列化,就会得到空响应。


解决步骤

  1. 网关层将Observable转为Promise
    从rxjs导入lastValueFrom方法包裹gRPC调用即可,修改后的网关代码如下:
// 顶部新增导入
import { lastValueFrom } from 'rxjs';
import { Body, Controller, OnModuleInit, Post } from '@nestjs/common';
import { Client, ClientGrpc } from '@nestjs/microservices';
import { authOptions } from 'src/grpc.options';
import { AuthService } from './grpc.interface';

@Controller('auth')
export class AuthController implements OnModuleInit {
    @Client(authOptions)
    private client: ClientGrpc;

    private authService: AuthService;

    onModuleInit() {
        this.authService = this.client.getService<AuthService>('AuthService');
    }

    @Post('login')
    async login(@Body('username') username: string, @Body('password') password: string)
    {
        // 用lastValueFrom包裹gRPC调用
        return lastValueFrom(this.authService.login({ username, password }));
    }
}
  1. 检查以下容易遗漏的配置:
  • 确认你的authOptions配置中package字段值为auth,和proto文件的package auth声明完全一致
  • 确认认证微服务启动时,已经正确注册了gRPC微服务配置,加载了对应proto文件
  • 确认网关侧定义的AuthServiceTS接口中,返回字段和proto定义的LoginReturn完全匹配,不要把access_token误写为驼峰格式accessToken
  • 确认认证微服务的AuthController已经被注册到对应模块的controllers数组中

内容的提问来源于stack exchange,提问作者Jur Dekker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:57:01