NestJS gRPC, маршрут 404 - PullRequest
       25

NestJS gRPC, маршрут 404

0 голосов
/ 28 января 2019

Я использую учебный проект NestJS gRPC:

https://github.com/nestjs/nest/blob/master/sample/04-grpc/

hero.proto содержимое файла:

syntax = "proto3";

package hero;

service HeroService {
  rpc FindOne (HeroById) returns (Hero) {}
}

message HeroById {
  int32 id = 1;
}

message Hero {
  int32 id = 1;
  string name = 2;
}

Отчто я понимаю, определяет путь как:

/hero.HeroService/FindOne

hero.controller.ts содержание:

@Controller()
export class HeroController implements OnModuleInit {
  @GrpcMethod('HeroService')
  findOne(data: HeroById): Hero {
    const items: Hero[] = [{ id: 1, name: 'John' }, { id: 2, name: 'Doe' }];
    return items.find(({ id }) => id === data.id);
  }
}

Теоретически, который должен представлять метод на:

http://localhost:3001/hero.HeroService/FindOne

Но при вызове выдает эту ошибку:

Ошибка: сообщение «Не найдено»: «Cannot POST /hero.HeroService/FindOne» statusCode: 404

Я знаю, что бью NestJS, потому что у меня есть промежуточное программное обеспечение.Если я нажимаю GET-маршрут, он работает и возвращает правильные данные, но GRPC-маршруты - все 404.Чего мне не хватает?

Я попытался @Controller('hero') вместо того, чтобы попробовать префикс пути.Кажется, нелегко заставить NestJS выйти из всех конечных точек gRPC для отладки ...

Полный исходный код проекта находится здесь:

https://github.com/kmturley/angular-nest-grpc

------ ОБНОВЛЕНИЕ -------

Установил grpc_cli с помощью:

brew tap grpc/grpc
brew install --with-plugins grpc

Затем попытался просмотреть конечные точки с помощью:

export GRPC_VERBOSITY=DEBUG
grpc_cli ls localhost:3001

И получил ошибку:

Получил ошибку при запросе конечной точки службы.

Или с помощью:

grpc_cli call localhost:3001 FindOne "id: 1" --protofiles=src/hero/hero.proto

Я получаю ошибку:

ServerReflectionInfo rpc failed. Error code: 14, details: OS Error

1 Ответ

0 голосов
/ 05 февраля 2019

Решил, добавив дополнительную строку в grpc-client.options.ts, чтобы определить URL:

export const grpcClientOptions: ClientOptions = {
  transport: Transport.GRPC,
  options: {
    url: 'localhost:50051',
    package: 'hero',
    protoPath: join(__dirname, './hero/hero.proto'),
  },
};

Затем я мог подключиться к нему через этот порт, используя:

grpc_cli call localhost:50051 FindOne "id: 1" --protofiles=backend/src/hero/hero.proto

Вы можете увидеть это здесь:

https://github.com/kmturley/angular-nest-grpc

...