Tengo un servidor y un cliente gRPC simples. El servidor y el cliente funcionan bien (supongo que ya que estoy recibiendo una respuesta y ningún error). Sin embargo, la respuesta está vacía y no tengo idea de por qué.
Aquí está el 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; } y 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"); }) y 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); })y la respuesta que estoy recibiendo
{ msgs: [] }Si ayuda, estaba siguiendo esta publicación de blog https://daily.dev/blog/build-a-grpc-service-in-nodejs
Gracias por adelantado.
Su definición de mensaje MsgList es un mensaje con un solo campo llamado msgs que tiene el tipo repeated Msg . El objeto que envíe debe tener esa forma. Por lo tanto, debe ser un objeto con un solo campo llamado msgs que tenga una matriz de objetos que coincidan con el formato de la definición del mensaje Msg . Su variable savedMessages no es eso, es solo una matriz, por lo que enviarla no obtiene el resultado que desea.