grpc / grpc-web

gRPC for Web Clients
https://grpc.io
Apache License 2.0
8.46k stars 762 forks source link

ReferenceError: self is not defined when trying to call a grpc-web function from a CLI/server application #1300

Closed bt-nia closed 1 year ago

bt-nia commented 1 year ago

Hi!

I'm not sure if this related to grpc-web, but wanted to make sure that the use case is supported. I'm trying to create a server that interacts with another server via grpc-web.

Here's my code:

import express, { Express, Request, Response } from 'express';
import dotenv from 'dotenv';
import * as gauth from 'google-auth-library';
​
import { MyServiceClient } from '../../src/ui/client/src/proto/my_pb_service';
import * as pb from '../../src/ui/client/src/proto/my_pb';
import { Observable } from 'rxjs';
​
dotenv.config();
​
const app: Express = express();
const port = process.env.PORT;
​
app.get('/', (req: Request, res: Response) => {
  var empty: string[];
  empty = [];
  res.send('Express + TypeScript Server');
​
  console.log("creating client")
  let r = new pb.CollectAndScanRequest();
  r.setResourceGroupNamesList(empty);
  var client = new MyServiceClient('https://my-dev.backend.url/api')
​
  console.log("client created")
  client.collectAndScan(r, (err, res) => {
    if (err !== null) {
      console.error(`collectAndScanAll: ${err}`);
    }
    if (res === null) {
      console.error(`collectAndScanAll: unexpected null response`);
    }
    console.log(`collectAndScanAll: ${res}`);
  });
  console.log("Done")
});
​
app.listen(port, () => {
  console.log(`⚡️[server]: Server is running at https://localhost:${port}`);
});

Here's the error I see:

creating client
client created
ReferenceError: self is not defined
    at new e (REDACTED/src/ui/client/node_modules/@improbable-eng/grpc-web/dist/grpc-web-client.js:1:16017)
    at REDACTED/src/ui/client/node_modules/@improbable-eng/grpc-web/dist/grpc-web-client.js:1:15931
    at REDACTED/src/ui/client/node_modules/@improbable-eng/grpc-web/dist/grpc-web-client.js:1:15942
    at o (REDACTED/src/ui/client/node_modules/@improbable-eng/grpc-web/dist/grpc-web-client.js:1:15312)
    at t.makeDefaultTransport (REDACTED/src/ui/client/node_modules/@improbable-eng/grpc-web/dist/grpc-web-client.js:1:15405)
    at e.createTransport (REDACTED/src/ui/client/node_modules/@improbable-eng/grpc-web/dist/grpc-web-client.js:1:8356)
    at new e (REDACTED/src/ui/client/node_modules/@improbable-eng/grpc-web/dist/grpc-web-client.js:1:7911)
    at t.client (REDACTED/src/ui/client/node_modules/@improbable-eng/grpc-web/dist/grpc-web-client.js:1:7619)
    at t.unary (REDACTED/src/ui/client/node_modules/@improbable-eng/grpc-web/dist/grpc-web-client.js:1:24075)
    at MyServiceClient.collectAndScan (REDACTED/src/ui/client/src/proto/my_pb_service.js:60:21)

Now, I'm new to TS/JS so this error and trace log is not really helpful for me. It could also be related to instantiating the grpc client, but then, I copied this from a working webfrontend code.

Does grpc-web support non browser invocation? Could this be related to webpack config?

sampajano commented 1 year ago

Hi!

I think your error is related to https://github.com/improbable-eng/grpc-web, NOT grpc/grpc-web :)

Will close this issue now :)

bt-nia commented 1 year ago

Doh, thanks!

sampajano commented 1 year ago

you're welcome and no worries 😃