Comments (1)
As we say, things are clearer in the morning! I found out what's my issue.
This error is coming from this check in the compiled proto file:
if (!(arg instanceof google_protobuf_struct_pb.Struct)) {
throw new Error('Expected argument of type google.protobuf.Struct');
}
Now, why this cause issues in my case?
In my project, compiled proto files are put in a separate package that is installed with npm (to prevent code duplication).
Basically:
my repo
|─ server
| |─ package.json
| `─ server.js
`─ lib/testproto
|─ package.json
|─ test.proto
|─ test_grpc_pb.js
`─ test_pb.js
So when in server, I npm I -S ../lib/testproto
, npm generates a symlink like this:
node_modules/testproto -> ../../lib/cache
Because it's a symlink, module deduplication between server
and testproto
doesn't work, as shown by npm ls google-protobuf
in server
:
zoddo@arch:~/git/myproject/server$ npm ls google-protobuf
[email protected] /home/zoddo/git/myproject/server
├─┬ [email protected] -> ./../lib/testproto
│ ├── [email protected]
│ └─┬ [email protected]
│ └── [email protected] deduped
└── [email protected]
As such, compiled files in testproto
don't use the same files than server
when doing require('google-protobuf')
, breaking the instanceof
check done in the compiled proto file.
In other words, that means that in the server, I generated an instance of Struct coming from:
server/node_modules/google-protobuf/google/protobuf/struct_pb.js
...while in testproto, it is checking if it's an instance of Struct coming from:
lib/cache/node_modules/google-protobuf/google/protobuf/struct_pb.js
(while it's the same code in the 2 files, they are different objects for the JS engine)
I'm not sure how to properly fix this issue. We can't even check arg.constructor.name
because Struct
isn't a class, but an anonymous function.
Right now I have a workaround by using TestService.getStruct.responseType.fromJavaScript(myObj)
instead of Struct.fromJavaScript(myObj)
, but that's a hacky solution I don't like at all!
from grpc-node.
Related Issues (20)
- Grpc Unary calls not giving any response after client is in idle for some time(30mins) HOT 10
- can we provide a detailed tutorial of grpc-js-xds? HOT 1
- How to capture gRPC keep alives with tcpdump? HOT 2
- not sure why i'm seeing grpc blocking the event loop so often HOT 4
- if the message has an optional field with a return value, the proto will attach a same name field with `_` prefix. why? HOT 2
- TypeError: The "original" argument must be of type Function | @grpc/grpc-js/build/src/resolver-dns.js HOT 3
- Exposing connection error reasons (ie, TLS failures) HOT 3
- Clarify build steps for v10+ HOT 2
- Discussion: Why HTTP2 pseudo headers such as :authory are removed from Metadata HOT 2
- Deadline examples/docs could use clarification HOT 8
- When response stream includes messages and then an error, final message(s) can be dropped HOT 1
- Servers base64-encode “grpc-status-details-bin” header with padding, but should be unpadded HOT 1
- Server does not check the HTTP method of the request HOT 2
- Compression handling has some issues
- Cardinality violations should use error code “unimplemented” HOT 3
- Servers send grpc-message trailer even when no error HOT 1
- successful calls still emit 'cancelled' as of v1.10.x HOT 2
- grpc-loader: Expose field options HOT 3
- `@grpc/grpc-js@latest` is pointing to an old version HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from grpc-node.