Разбор параметров для выражения конечной точки - PullRequest
0 голосов
/ 31 мая 2018

У меня работает несколько экспресс-конечных точек, которые запрашивают базу данных.Я пытаюсь проанализировать параметры в моем экспресс-шлюзе следующим образом:

paths: ['/users', '/users/:userId']

Конечная точка пользователя работает на локальном хосте, а /users возвращает всех пользователей, как и предполагалось.Проблема в том, что /users/:userId также возвращает всех пользователей - он должен возвращать только одного.

Когда я пытаюсь вызвать конечную точку без шлюза, она работает нормально (http://localhost:3000/users/F692D717-F304-4D9B-A302-44F143923A93/)

Но этоне работает через шлюз. Кажется, что он никогда не достигает последней конечной точки или не анализирует параметр.

My gateway.config.yml:

http:
  port: 8080
admin:
  port: 9876
  hostname: localhost
apiEndpoints:
  users:
    host: "*"
    paths: ['/users', '/users/:userId']
  accounts:
    host: "*"
    paths: '/accounts'
  companies:
    host: "*"
    paths: '/companies'
serviceEndpoints:
  users:
    url: 'http://localhost:3000/users'
  accounts:
    url: 'http://localhost:3002/accounts'
  companies:
    url: 'http://localhost:3001/companies'
policies:
  - basic-auth
  - cors
  - expression
  - key-auth
  - log
  - oauth2
  - proxy
  - rate-limit
pipelines:
  users:
    apiEndpoints:
      - users
    policies:
      - proxy:
          - action:
              serviceEndpoint: users 
              changeOrigin: false
              ignorePath: true
  accounts:
    apiEndpoints:
      - accounts
    policies:
      - proxy:
          - action:
              serviceEndpoint: accounts 
              changeOrigin: false
              ignorePath: true
  companies:
    apiEndpoints:
      - companies
    policies:
      - proxy:
          - action:
              serviceEndpoint: companies 
              changeOrigin: false
              ignorePath: true

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Нашел решение.Под действием политики прокси для данной конечной точки мне нужно установить prependPath:false.Я не могу найти причину в документации.

Финал gateway.config.yml:

 http:
  port: 8080
admin:
  port: 9876
  hostname: localhost
apiEndpoints:
  users:
    host: "*"
    paths: ['/users', '/users/:userId']
  accounts:
    host: "*"
    paths: '/accounts'
  companies:
    host: "*"
    paths: '/companies'
serviceEndpoints:
  users:
    url: 'http://localhost:3000/users'
  accounts:
    url: 'http://localhost:3002/accounts'
  companies:
    url: 'http://localhost:3001/companies'
policies:
  - basic-auth
  - cors
  - expression
  - key-auth
  - log
  - oauth2
  - proxy
  - rate-limit
pipelines:
  users:
    apiEndpoints:
      - users
    policies:
      - proxy:
          - action:
              serviceEndpoint: users 
              changeOrigin: false
              prependPath: false
  accounts:
    apiEndpoints:
      - accounts
    policies:
      - proxy:
          - action:
              serviceEndpoint: accounts 
              changeOrigin: false
              prependPath: false
  companies:
    apiEndpoints:
      - companies
    policies:
      - proxy:
          - action:
              serviceEndpoint: companies 
              changeOrigin: false
              prependPath: false
0 голосов
/ 04 июня 2018

Вы пытались установить ignorePath на false?Это должно сработать или, наоборот, просто удалить параметр из файла, так как его значение по умолчанию false

...