Stworzyłem prosty serwer i klienta GRPC.Czy mogę wysłać niestandardowy komunikat o błędzie z serwera do klienta GRPC?
Co chcę zrobić, to utworzyć niestandardowy błąd na serwerze i przekazać go do klienta. Mój kod wygląda następująco:
Server.js
var error = require('error');
var PROTO_PATH = grpc.load(__dirname + '/proto/hello.proto');
var hello_proto = PROTO_PATH.hello;
function sayHello(call, callback) {
try {
var jsErr = new Error('MY_ERROR');
jsErr.newStatus = 401;
jsErr.newMessage = 'custom unAuthorized error';
console.log(Object.getOwnPropertyNames(jsErr));
console.log(jsErr);
callback(jsErr);
} catch(e) {
callback(e);
}
}
function sayHelloAgain(call, callback) {
callback(null, {message: 'Hello Again ' + call.request.name});
}
function main() {
var server = new grpc.Server();
server.addProtoService(hello_proto.Hello.service, {sayHello: sayHello,sayHelloAgain: sayHelloAgain });
server.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure());
server.start();
}
main();
Client.js
var grpc = require('grpc');
var PROTO_PATH = grpc.load(__dirname + '/proto/hello.proto');
var hello_proto = PROTO_PATH.hello;
function main() {
var client = new hello_proto.Hello('localhost:50051',grpc.credentials.createInsecure());
var user;
if (process.argv.length >= 3) {
user = process.argv[2];
} else {
user = 'world';
}
client.sayHello({name: user}, function(err, response) {
console.log(Object.getOwnPropertyNames(err));
console.log(err);
});
}
main();
i mój plik proto
syntax = "proto3";
package hello;
service Hello {
rpc sayHello(sayHelloRequest) returns (sayHelloResponse) {}
rpc sayHelloAgain(sayHelloRequest) returns (sayHelloResponse) {}
}
message sayHelloRequest {
string name = 1;
}
message sayHelloResponse {
string message = 1;
}
gdy uruchomię cient wynik z każdego wygląda jak t jego serwer o numerze
.
[ 'stack', 'message', 'newStatus', 'newMessage' ]
{ [Error: MY_ERROR] newStatus: 401, newMessage: 'custom unAutorized error' }
Klient.
[ 'stack', 'message', 'code', 'metadata' ]
{ [Error: MY_ERROR] code: 2, metadata: Metadata { _internal_repr: {} } }
więc mój stworzył niestandardowe funkcje Javascript Błąd w newStatus, newMessage
właściwości zostały usunięte i został przekształcony do GRPC wiadomości błąd standardowy.
Moje pytania są
- Czy jest możliwe, aby wysłać wiadomość do niestandardowego klienta?
- Czy mogę utworzyć błąd GRPC, a nie błąd javascript?
- Jednym ze sposobów wysyłania niestandardowych atrybutów do klienta jest, moim zdaniem, dodanie niestandardowych danych do
Metadata
. ale nie jestem również pewien, jak to zrobić.
Hm mogę to zrozumieć. ale chcę wysłać mój błąd w pierwszym parametrze, jako obiekt błędu, w twoim przykładzie przekazujesz go w parametrze 2 nd i nie jest obiektem błędu. –