【问题标题】:Getting empty response from gRPC call从 gRPC 调用获得空响应
【发布时间】:2021-10-15 11:54:24
【问题描述】:

我有一个简单的 gRPC 服务器和客户端。服务器和客户端工作正常(我假设因为我得到了响应并且没有错误)。但是响应是空的,我不知道为什么。

这是原型message.proto

syntax = "proto3";

message Msg {
    int32 timeStamp = 1;
    string text = 2;
    string sender = 3;
}

message Empty {}

service MsgService{
    rpc AllMessages (Empty) returns (MsgList) {}
}

message MsgList {
    repeated Msg msgs = 1;
}

server.js

const grpc = require('@grpc/grpc-js');
const PROTO_PATH = "./message.proto";
const protoLoader = require('@grpc/proto-loader');

const options = {
    keepCase: true,
    longs: String,
    enums: String,
    defaults: true,
    oneofs: true
}

const packageDefinition = protoLoader.loadSync(PROTO_PATH, options);
const msgProto = grpc.loadPackageDefinition(packageDefinition);

const server = new grpc.Server();
let savedMessages = [
    { timeStamp: 1, text: "lorem", sender: "alex" },
    { timeStamp: 2, text: "ipsum", sender: "bob" },
    { timeStamp: 3, text: "dolor", sender: "alex" },
    { timeStamp: 4, text: "net", sender: "bob" }
];

server.addService(msgProto.MsgService.service, {
    AllMessages: (_, callback) => {
        callback(null, savedMessages);
    }
})

server.bindAsync("127.0.0.1:50051", grpc.ServerCredentials.createInsecure(), (err, port) => {
    if (err) {
        console.log(err);
    }
    console.log(port);
    server.start();
    console.log("Server running at 127.0.0.1:50051");
})

client.js

const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');
const PROTO_PATH = "./message.proto";

const options = {
    keepCase: true,
    longs: String,
    enums: String,
    defaults: true,
    oneofs: true,
};

var packageDefinition = protoLoader.loadSync(PROTO_PATH, options);

const MsgService = grpc.loadPackageDefinition(packageDefinition).MsgService;

const client = new MsgService(
    "localhost:50051",
    grpc.credentials.createInsecure()
);

client.AllMessages({}, (err, msg) => {
    // console.log(err);
    if (err) throw err;
    console.log(msg);
    // console.log(msg);
})

我得到的回复

{ msgs: [] }

如果有帮助,我会关注这篇博文https://daily.dev/blog/build-a-grpc-service-in-nodejs

提前致谢。

【问题讨论】:

    标签: javascript node.js grpc grpc-node


    【解决方案1】:

    您的MsgList 消息定义是一条消息,其中包含一个名为msgs 的字段,其类型为repeated Msg。您发送的对象应具有该形式。因此,它应该是一个对象,它有一个名为msgs 的字段,它有一个与Msg 消息定义的格式匹配的对象数组。你的 savedMessages 变量不是那个,它只是一个数组,这就是为什么发送它不会得到你想要的结果。

    【讨论】:

    • 谢谢。它现在工作正常。可能该博客有一些错误或发生了一些变化。
    • 是的,那是那篇博文中的错误。
    猜你喜欢
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多