gpt4 book ai didi

node.js - 无法使用@grpc/proto-loader 导入谷歌的原型(prototype)

转载 作者:搜寻专家 更新时间:2023-10-31 23:03:03 24 4
gpt4 key购买 nike

我有以下原型(prototype):

syntax = "proto3";

import "google/rpc/status.proto";

message Response {
google.rpc.Status status = 1;
}

message Request {
Type name = 1;
}

service Service {
rpc SomeMethod (Request) returns (Response);
}

我正在用 Node 写一个客户端:

    const path = require('path');
const grpc = require('grpc');
const protoLoader = require('@grpc/proto-loader');
const protoFiles = require('google-proto-files');

const PROTO_PATH = path.join(__dirname, '/proto/myproto.proto');

const packageDefinition = protoLoader.loadSync(
PROTO_PATH,
{
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true,
includeDirs: [protoFiles('rpc')],
},
);

const proto = grpc.loadPackageDefinition(packageDefinition);
const client = new proto.Service('localhost:1111', grpc.credentials.createInsecure());

当我运行客户端时,出现以下错误:TypeError: proto.Service 不是构造函数。我发现它与 status.proto 的导入有关。使用 proto-loader 导入 google protos 的正确方法是什么?服务器使用 Java。

最佳答案

Olga,如果您正在使用 includeDirs,则不能在 PROTO_PATH 中使用绝对路径。显然,您需要将两个路径(即 myproto.proto 的路径和 google-proto-files 的路径)放入 includeDirs 并仅使用文件名作为 PROTO_PATH 然后它就可以正常工作。看这里:

https://github.com/grpc/grpc-node/issues/470

这里是修改后的有效代码。请注意,我还必须在 myproto.proto 中将“Type”替换为“int32”。

const path = require('path');
const grpc = require('grpc');
const protoLoader = require('@grpc/proto-loader');
const protoFiles = require('google-proto-files');

const PROTO_PATH = 'myproto.proto';

const packageDefinition = protoLoader.loadSync(
PROTO_PATH,
{
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true,
includeDirs: ['node_modules/google-proto-files', 'proto']
},
);

const protoDescriptor = grpc.loadPackageDefinition(packageDefinition);
const client = new protoDescriptor.Service('localhost:1111', grpc.credentials.createInsecure());

希望对您有所帮助。 :)

关于node.js - 无法使用@grpc/proto-loader 导入谷歌的原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52786951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com