Параметры синтаксического анализа для выражения конечной точки

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

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

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

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

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

Мой 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

Я использую экспресс в своем приложении и сделал что-то похожее на вас. Я использовал для этого способ регулярного выражения и сделал это только с одним маршрутом с этим параметром '/ db / user / (: newUser)?'. Не могли бы вы попробовать?

Rémi C. 31.05.2018 16:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
520
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Если я установил ignorePath: false, я получаю эту ошибку при попытке доступа к моей конечной точке api: { "success": false, "message": "Conversion failed when converting from a character string to uniqueidentifier." }

TietjeDK 05.06.2018 08:26
Ответ принят как подходящий

Нашел решение. Под действием политики прокси для данной конечной точки мне нужно установить 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
prependPath по умолчанию - true. Это означает, что путь URL-адреса конечной точки службы будет иметь префикс для пути входящего запроса. Если prependPath равен true, входящий запрос конечной точки API к /users/12345 с конечной точкой службы http://localhost:3000/users будет прокси на http://localhost:3000/users/users/12345. Установка prependPath на false полностью игнорирует путь конечной точки службы. В качестве альтернативы вы можете удалить объявление prependPath: false и удалить пути из конечных точек службы. Это должно работать нормально.
Kevin Swiber 08.08.2018 06:00

Другие вопросы по теме