Vedant Agarwala
Vedant Agarwala

Reputation: 18819

"TypeError: Service is not a constructor" when creating a client in grpc-js

I'm creating a simple gRPC client but I'm getting the error:

Error: TypeError: HelloService is not a constructor
    at grpcCall (...)

js code:

const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');
...
const HelloService = grpc.loadPackageDefinition(packageDefinition).HelloService;
const client = new HelloService('grpcb.in:9000', grpc.credentials.createInsecure()); // <-- error here

proto file:

syntax = "proto2";

package hello;

service HelloService {
  rpc SayHello(HelloRequest) returns (HelloResponse);
  rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);
  rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);
  rpc BidiHello(stream HelloRequest) returns (stream HelloResponse);
}

message HelloRequest {
  optional string greeting = 1;
}

message HelloResponse {
  required string reply = 1;
}

Upvotes: 2

Views: 450

Answers (1)

Vedant Agarwala
Vedant Agarwala

Reputation: 18819

Turns out, I need to include the package name from the proto file i.e. package hello;. So, I need to change the line

const HelloService = grpc.loadPackageDefinition(packageDefinition).HelloService;

to

const HelloService = grpc.loadPackageDefinition(packageDefinition).hello.HelloService;
                                        // needed to add this --> ^^^^^^

Took me a while to figure it out. I feel the error message could have been much better, like:

'HelloService' service doesn't exist in the proto file

Upvotes: 1

Related Questions