получить данные из базы данных внутри функции gRPC в nodejs

Я пытался создать функцию, которая возвращает токен по теме с помощью 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?


person abedelhak    schedule 26.03.2020    source источник


Ответы (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);
      }
    });

  }
});
person murgatroid99    schedule 01.04.2020