Kann ich eine benutzerdefinierte Fehlermeldung vom Server zum Client GRPC senden?

9

Ich habe einen einfachen GRPC-Server und -Client erstellt.

Ich möchte einen benutzerdefinierten Fehler auf dem Server erstellen und ihn an den Client übergeben. Mein Code sieht folgendermaßen aus:

Server.js

%Vor%

Client.js

%Vor%

und meine Proto-Datei

%Vor%

Wenn ich den cient benutze, sieht das Ergebnis wie folgt aus

Server.

%Vor%

Kunde.

%Vor%

So wurden die newStatus, newMessage -Eigenschaften des erstellten JavaScript-Fehlers entfernt und in die GRPC-Standardfehlermeldung konvertiert.

Meine Fragen sind

  1. Ist es möglich, eine benutzerdefinierte Nachricht an den Client zu senden?
  2. Kann ich einen GRPC-Fehler erstellen, keinen JavaScript-Fehler?
  3. Eine Möglichkeit, benutzerdefinierte Attribute an den Client zu senden, ist, dass ich die benutzerdefinierten Daten zu Metadata hinzufügen möchte. aber ich bin auch nicht sicher, wie es geht.
Kanishka Panamaldeniya 24.11.2016, 02:31
quelle

2 Antworten

1

1.Ja 2. Vielleicht

Vermeiden Sie, spezielle Objekte (wie new Error ) über die Verbindung zu senden. Senden Sie ein einfaches Objekt mit einer Fehlereigenschaft und suchen Sie am anderen Ende nach dem Wert. Siehe Ссылка , um einen Überblick über leicht übertragbare Daten zu erhalten.

in Server.js versuchen

%Vor%

in der Client.js

%Vor%     
Walle Cyril 05.12.2016 17:08
quelle
1

Es gibt eine hilfreiche Antwort auf dieselbe Frage in der gRPC Google Group: Ссылка

  

Sie können mit dem Fehler eine benutzerdefinierte Statusmeldung an den Client senden   Nachricht Eigenschaft des Objekts. In Ihrem Beispiel ist das "MY_ERROR". Das   Statuscode sollte in der "code" -Eigenschaft sein, genauso wie Sie es sehen   auf der Clientseite.

     

Wenn Sie die gRPC-Statusstruktur anstelle von JavaScript verwenden möchten   Fehler, Sie können dies tun, indem Sie die "Code" -Eigenschaft und die   "Nachricht" oder "Details" -Eigenschaft des Objekts.

     

Wenn Sie Metadaten senden möchten, sollten Sie eine Instanz des   grpc.Metadata-Klasse, dann fügen Sie dem resultierenden Objekt Schlüssel / Wert-Paare hinzu.   Dann kannst du es als drittes Argument des Callbacks übergeben oder den   errors "metadata" -Eigenschaft, um es mit dem Fehler an den Client zu senden.

     

Bitte beachten Sie, dass die von gRPC verwendeten Statuscodes nicht HTTP-Status sind   Codes, aber gRPC spezifische Codes, die in grpc.status definiert sind. Sie   sollte nur die Code-Eigenschaft des Fehlers mit diesen Codes festlegen. Wenn du   Möchten Sie Ihre eigenen Codes senden, verwenden Sie stattdessen Metadaten.

Ich werde illustrieren, was oben mit einigen Beispielen geschrieben wurde.

Um eine benutzerdefinierte Nachricht mit dem Fehler zu senden, erstellen Sie ein Error mit der Nachricht. Dies legt die Eigenschaft message fest:

%Vor%

Wie oben erwähnt, ist es wahrscheinlich nicht sinnvoll, gRPC-Statuscodes in Ihrem Fall direkt zu setzen. Als Referenz kann der gRPC-Statuscode jedoch über die code -Eigenschaft des Fehlers gesetzt werden:

%Vor%

Um eigene Fehlercodes oder andere Informationen zu senden, verwenden Sie metadata:

%Vor%

Nun, wenn der Server den Fehler wie oben konstruiert und der Client den zurückgegebenen Fehler mit:

ausgibt %Vor%

dann ist die Client-Ausgabe:

%Vor%     
msmolens 06.12.2016 01:08
quelle