提问者:小点点

GRPC客户端使用,节点js面临问题


当我尝试使用node js创建grpc客户端调用时,我遇到了一个问题。当我在proto文件中使用“google/api/annotations.proto”时,我得到一个错误。如果我删除它,它会工作文件。我可以知道我从我的客户那里错过了什么吗。js公司

错误:无法解析的扩展:“扩展google”。protobuf。中的MethodOptions。谷歌。根目录下的api。resolveAll(src/github.com/workspace/explorer/node\u modules/protobufjs/src/root.js:255:15)位于对象。对象上的loadSync(/src/github.com/workspace/explorer/node\u modules/@grpc/proto-loader/build/src/index.js:224:16)。(/src/github.com/workspace/explorer/server/grpc/client.js:3:37)

syntax = 'proto3';

import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto";

package chain;

service chain {
  
  rpc GetHeight(HeightRequest) returns(HeightResponse) { option (google.api.http).get = "/api/height/{height}";}
 
}

message HeightRequest {
  string hash = 1;
}

message HeightResponse {
  int64 height=1;
}


客户js公司

var PROTO_PATH = __dirname + '/proto/chain.proto';
var parseArgs = require('minimist');
var grpc = require('@grpc/grpc-js');
var protoLoader = require('@grpc/proto-loader');
var packageDefinition = protoLoader.loadSync(
    PROTO_PATH,
    {
        keepCase: true,
        longs: String,
        enums: String,
        defaults: true,
        oneofs: true,

    });
var chain_proto = grpc.loadPackageDefinition(packageDefinition).chain;

function main() {
    var argv = parseArgs(process.argv.slice(2), {
        string: 'target'
    });
    var target;
    if (argv.target) {
        target = argv.target;
    } else {
        target = 'localhost:9040';
    }
    var client = new chain_proto.chain(target,
        grpc.credentials.createInsecure());

    client.GetHeight(function (err, response) {
        console.log('height:', response);
    });
}

main();

共1个答案

匿名用户

我找到了上述错误的解决方案,您需要在项目目录中创建一个文件夹-

接下来需要添加一个路径,如下所示。

 PROTO_PATH,
    {
        keepCase: true,
        longs: String,
        enums: String,
        defaults: true,
        oneofs: true,
        includeDirs: [
            __dirname + '/googleapis',
        ]

    });