【问题标题】:get data from database inside a gRPC function in nodejs从nodejs中的gRPC函数内的数据库中获取数据
【发布时间】:2020-03-26 22:30:06
【问题描述】:

我一直在尝试使用 grpc nodejs 和 mongodb 创建一个按主题返回令牌的函数。

原型文件

syntax = "proto3";

package tokens;

service tokenService {
    rpc getToken (TokenRequest) returns (TokenReply) {}
}

message TokenRequest {
    string subject = 1;
    string platform = 2;
}

message TokenReply {
   string token = 1;
   string subject = 2;
   string platform = 3;
}

服务器文件中的函数

register是猫鼬模型

server.addService(tokens.tokenService.service, {
  getToken: (call, callback) => {

    register.find({ subject: call.request.subject }, (err, res) => {
      return callback(null, res);
    });

    callback({
      code: grpc.status.NOT_FOUND,
      details: "Not found"
    });

  }
});

当我尝试使用 BloomRPC 对其进行测试时,它一直在加载。

当我在回调中放置一个静态对象时,它可以工作。像这样。

callback(null, { token: "test", subject: "test", platform: "test" });

那么我如何从我的数据库中获取数据并使用我的getToken 函数发送它们?

【问题讨论】:

    标签: node.js grpc grpc-node


    【解决方案1】:

    假设register.find 是一个异步函数,您当前的代码会立即调用带有错误的回调,然后当find 完成时,它会尝试再次调用回调并返回结果,但此时为时已晚因为回调已经被调用。您应该等待 find 完成,然后再调用回调:

    server.addService(tokens.tokenService.service, {
      getToken: (call, callback) => {
    
        register.find({ subject: call.request.subject }, (err, res) => {
          if (err) {
            callback({
              code: grpc.status.NOT_FOUND,
              details: "Not found"
            });
          } else {
            return callback(null, res);
          }
        });
    
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2020-07-14
      • 1970-01-01
      • 2021-10-15
      • 2020-12-11
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多