improbable-eng / grpc-web

gRPC Web implementation for Golang and TypeScript
Apache License 2.0
4.39k stars 436 forks source link

Status codes and error messages are displayed incorrectly on the angular client. #1126

Open Quttar opened 2 years ago

Quttar commented 2 years ago

I am using the following code to get the result of executing a unary grpc request from a client.

client.login(req, (error, response) => {
      if (response != null) {
        this.tokenService.saveToken(response.getAccesstoken());
      }
      else{
        alert("Error code: " + error?.code + "Message: " + error?.message);
      }
    });

When the server just returns the result, then everything works as it should. But if the server should return an error, then no matter what status code and message the server returns, this code always outputs the following line:

Error code: 2 Message: Response closed without grpc status (headers only)

At the same time, I'm testing the API using the Kreya tool (In normal gprc mode and in grpc-web mode). In this program, all status codes and error messages are displayed correctly.

On the backend I use ASP.NET Core with Grpc.AspNetCore.Web nuget package to support grpc-web

What could be the matter that the error status code and the message are always the same?

johanbrandhorst commented 2 years ago

Seems like the library doesn't like the way that errors are sent from the backend. Could you include a copy of the body of the response when you get this error? In grpc-web the status should be included at the end of the body. Maybe it's encoded in an unexpected way?

DaAitch commented 1 year ago

I had the same problem and the reason was CORS. Without access-control-expose-headers header the client is not allowed to read the grpc headers and returns the message you mentioned.

Solution server should set

KAW0 commented 1 year ago

@DaAitch saddly it doesn't work for me

dmitryshelomanov commented 11 months ago

same issue https://github.com/improbable-eng/grpc-web/issues/1177