Метод узла gRPC-js не вызывается, когда протокол указывает тип параметра void

#javascript #node.js #grpc #grpc-node

Вопрос:

Я только недавно начал экспериментировать с gRCP и в настоящее время пытаюсь понять, как это работает, используя node-js для создания простого примера . Однако после создания протокола, который будет использоваться как между клиентом, так и между сервером . Один из моих методов rpc не был вызван . Я добавил ниже конкретный метод, который не вызывался вместе со спецификацией сообщения в .proto файле .Я также привел ниже пример как клиентского вызова, так и обработчика на стороне сервера.

.прото

 service WeatherService{
    rpc RetrieveAllWeather (void) returns (Temp);
}
message void{}

message Temp{
    string msg =1; 
}
 

server.js

 // .... server configuration
server.addService(weather_proto.WeatherService.service,
    {
        "RetrieveAllWeather":RetrieveAllWeather,
        "RetrieveWeatherByQuery":RetrieveWeatherByQuery,
        "SaveWeatherToFile":SaveWeatherToFile,
    }    
); 
    
server.bindAsync(
    "127.0.0.1:4000",
    grpc.ServerCredentials.createInsecure(),
    (err,port)=>{
        if(err){
            console.error(err);
            process.exit(1);
        }
        console.log("Listening on port " port)
        server.start();
    }
);

function RetrieveAllWeather(call,callback){
    console.log(call);
    console.log("working");
    callback(null,"call");
}
 

client.js

 
const client  =  new weather_proto.WeatherService(
    "127.0.0.1:4000",grpc.credentials.createInsecure()
);


client.RetrieveAllWeather({},(err,res)=>{
    if(err){
        return err;
    }
    console.log("working");
    console.log(JSON.stringify(res));
});

 

Кажется, потому что я пытаюсь указать, RetrieveAllWeather чтобы ничего не принимать в качестве полезной нагрузки и отправлять json {msg:"call"} , но это не работает, в то время как работают другие созданные мной методы .

Ответ №1:

Похоже , что использование void соглашения об именовании сообщений было причиной ошибки, когда я переключился на использование заглавного имени для спецификации сообщения, оно начало работать . Все, что я сделал, это перешел с message void{} на message Void{}