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

Node.js中gRPC声明void参数类型的RPC方法未触发如何解决

问题原因
  • 服务端返回值不符合proto协议定义:你在.proto中声明RetrieveAllWeather的返回类型是Temp结构体,必须包含msg字段,但你在服务端实现的回调中直接传入了字符串"call",gRPC会自动校验返回结构,校验不通过会直接阻断请求,不会触发后续的客户端回调逻辑。
  • 客户端缺少错误日志输出:你在客户端的回调中只对错误做了return处理,没有打印错误详情,无法直观感知到gRPC返回的结构校验错误信息。
解决方案
  1. 修正服务端返回结构,将RetrieveAllWeather方法中的回调参数替换为符合Temp定义的对象:
function RetrieveAllWeather(call,callback){
    console.log(call);
    console.log("working");
    callback(null, {msg: "call"});
}
  1. 补全客户端错误日志,方便后续排查其他问题:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:18:02