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

NestJS调用Python gRPC服务时pdf_url参数无法正常传递问题排查

NestJS调用Python gRPC服务时pdf_url参数无法正常传递问题排查

我帮你排查了下代码,发现核心问题出在NestJS调用gRPC服务时的参数格式错误,下面具体分析和解决:

问题根源

看你pdf.service.ts里的调用代码:

this.grpcService.FindWhitestSpace(`{pdf_url:plop}`).subscribe(...)

这里你传递的是一个字符串,而不是符合.proto定义的PDFRequest对象。gRPC客户端会把这个字符串直接作为请求体序列化,导致Python服务端接收到的request.pdf_url字段为空(因为字符串无法解析成包含pdf_url属性的结构体)。

而你用grpcurl测试时传递的是标准JSON对象:

grpcurl -plaintext -d '{"pdf_url": "https://example.com"}' ...

这种格式能被gRPC正确解析,所以Python服务能正常拿到参数。

修正步骤

1. 修正参数传递格式

把字符串参数改成对象格式,直接传入包含pdf_url属性的对象:

// 替换原来的字符串参数,用方法接收的pdf_url变量
this.grpcService.FindWhitestSpace({ pdf_url }).subscribe(
  (response) => {
    console.log('Response received:', response);
    resolve(response.whitespaces);
  },
  (error) => {
    console.error('gRPC error:', error);
    reject(error);
  },
);

这里用ES6的对象简写语法{ pdf_url }等价于{ pdf_url: pdf_url },正好匹配.proto里定义的PDFRequest结构。

2. 修正类型定义(可选但推荐)

你的GRPCPdfService接口里,FindWhitestSpace的参数类型定义成了string,这和实际需要的对象类型不符,建议修正:

// 先定义请求体的类型
interface PDFRequest {
  pdf_url: string;
}

interface GRPCPdfService {
  FindWhitestSpace(data: PDFRequest): Observable<WhitespaceResponse>;
}

这样TypeScript会帮你做类型校验,避免类似的格式错误。

验证

修正后再调用接口,Python服务端应该能正常打印出Received URL: [你的pdf链接],和grpcurl测试的效果一致。

备注:内容来源于stack exchange,提问作者Joachim DARMALINGON

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:48:12