当前位置: 首页 > 知识库问答 >
问题:

将Proto文件导入NodeJS中的另一个ProtoFile

董意蕴
2023-03-14

我对协议缓冲区很陌生。

我注意到grpc proto loader模块只需要加载一个proto定义文件,所以我在代码中加载了它,如下所示:

const PROTO_PATH = `${path.resolve(__dirname, '..')}${path.sep}protos${path.sep}index.proto`;
const packageDefinition = protoLoader.loadSync(PROTO_PATH, {
    keepCase: true,
    longs: String,
    enums: String,
    defaults: true,
    oneofs: true
});

let indexProto = grpc.loadPackageDefinition(packageDefinition).index;

现在是我的索引。proto文件正在引用另一个proto文件,如下所示:

syntax = "proto3";

package index;

import public "location_updater.proto";

而我的location_updater.proto定义如下

syntax = "proto3";

package location_updater;

service LocationUpdater{
    rpc updateLocation(Location) returns LocationUpdateResponse{}
}

message Location{
    string apiKey = 1;
    string updateTarget = 2;
    double longitude = 3;
    double latitude = 4;
}

message LocationUpdateResponse{
    int32 statusCode = 1;
}

当我做以下操作时:

 let grpcServer = new grpc.Server();
        grpcServer.addService(indexProto.location_updater.LocationUpdater.service, {

        });

我收到一个错误TypeError:无法读取未定义的属性“LocationUpdater”

如果我将location_updater.proto的内容移动到index.proto文件中,它可以工作,但我不希望这种行为,因为我将使用许多不同的原始文件来处理不同的业务逻辑。

我做错了什么?最好的方法是什么?。

感谢您的意见。

共有1个答案

李泓
2023-03-14

您需要使用includeDirs选项在搜索路径中包含目录,以便proto-loader库知道如何查找导入的文件。这些目录应该是导入路径相对于的目录。

在这种情况下,假设location\u updater。proto与index位于同一目录中。proto,includeDirs选项应该是一个包含单路径的数组/protos。这些目录还可以用于搜索主文件,因此您可以传递一个仅为索引的proto路径。协议。

 类似资料:
  • 问题内容: 在将其标记为重复之前, 请阅读我的问题: 我正在尝试从子目录的文件中导入类 并且在我的课程中有()我尝试了什么: 放入main.py: 我收到错误消息: 从文件导入Klasa ImportError:没有名为“文件”的模块 当我尝试使用时: 我收到此错误: tmp = Klasa() NameError:未定义名称“ Klasa” 我在子文件夹中放了一个空格,它仍然不起作用,而我在 :

  • 我正在使用由Visual Studio生成的gRPC服务项目。我有两个原型文件位于同一个“原型”目录中。我有一个原型,另一个原型文件有导入。它似乎找到了文件,但我无法引用来自另一个文件的任何消息。当我这样做时,我得到一个“blahblah”是未定义的错误。我已经拍摄了一些情况的屏幕截图。任何帮助都将不胜感激!

  • 问题内容: 我在编写Python程序很有趣,但在尝试从另一个文件中的类导入函数时遇到问题。这是我的代码: 我想返回一个从另一个文件中的类调用的函数。当我导入文件时,它首先运行其中的类,然后继续运行原始代码。为什么会这样? 这是comm_system的代码: 问题答案: 将通讯系统的结尾更改为: 总是在运行的那些行会导致它在导入和执行时都运行。

  • 问题内容: 我是React的新手。希望使用单独文件中的少量组件来开发应用程序并将其导入到我的App.js中 我尝试过但无法弄清楚我在做什么错。 这是我的html: 这是我的App.js :( 来自js /目录) 这是我的MyComp.js (来自js / components /目录) 如果我这样尝试,我什么也看不到。而如果我在App.js中创建类,则它就像一个魅力。 有什么建议我在做什么错? 问

  • 问题内容: 如何将变量从一个文件导入到另一个文件? 示例:具有变量以及如何将其传递给? 如何将 所有 变量从一个导入到另一个? 问题答案: 将导入file1中的所有对象和方法

  • 如何将变量从一个文件导入到另一个文件? 示例:具有变量和如何将它们传递到? 如何将所有变量从一个导入到另一个?