0

我一直在尝试使用 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函数发送它们?

4

1 回答 1

0

假设这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-04-01T18:02:12.670 回答