Node.js中gRPC声明void参数类型的RPC方法未触发如何解决
问题原因
- 服务端返回值不符合proto协议定义:你在
.proto中声明RetrieveAllWeather的返回类型是Temp结构体,必须包含msg字段,但你在服务端实现的回调中直接传入了字符串"call",gRPC会自动校验返回结构,校验不通过会直接阻断请求,不会触发后续的客户端回调逻辑。 - 客户端缺少错误日志输出:你在客户端的回调中只对错误做了
return处理,没有打印错误详情,无法直观感知到gRPC返回的结构校验错误信息。
解决方案
- 修正服务端返回结构,将
RetrieveAllWeather方法中的回调参数替换为符合Temp定义的对象:
function RetrieveAllWeather(call,callback){ console.log(call); console.log("working"); callback(null, {msg: "call"}); }
- 补全客户端错误日志,方便后续排查其他问题:
client.RetrieveAllWeather({},(err,res)=>{ if(err){ console.error("调用RetrieveAllWeather失败:", err); return; } console.log("working"); console.log(JSON.stringify(res)); });
额外说明:你自定义的空void消息可以正常使用,不需要修改,如果你想遵循标准规范也可以替换为谷歌官方定义的google.protobuf.Empty类型,这不是本次问题的根源。
内容的提问来源于stack exchange,提问作者hebronace
相关产品推荐
相关产品推荐

