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
Metadata
hinzufügen möchte. aber ich bin auch nicht sicher, wie es geht. 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%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:
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:
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%Tags und Links javascript node.js protocol-buffers grpc