[英]Getting empty response from gRPC call
我有一個簡單的 gRPC 服務器和客戶端。 服務器和客戶端工作正常(我假設是因為我收到了響應並且沒有錯誤)。 然而,響應是空的,我不知道為什么。
這是原始message.proto
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
提前致謝。
您的MsgList
消息定義是一條消息,其中包含一個名為msgs
字段,該字段的類型為repeated Msg
。 您發送的對象應該具有該形式。 因此,它應該是一個具有名為msgs
的單個字段的對象,該字段具有與Msg
消息定義的格式匹配的對象數組。 你的savedMessages
變量不是那個,它只是一個數組,這就是為什么發送它不會得到你想要的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.