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





Вы пробовали установить ignorePath на false? Это должно помочь или, в качестве альтернативы, просто удалите параметр из файла, поскольку его значение по умолчанию - false.
Если я установил ignorePath: false, я получаю эту ошибку при попытке доступа к моей конечной точке api: { "success": false, "message": "Conversion failed when converting from a character string to uniqueidentifier." }
Нашел решение. Под действием политики прокси для данной конечной точки мне нужно установить 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 и удалить пути из конечных точек службы. Это должно работать нормально.
Я использую экспресс в своем приложении и сделал что-то похожее на вас. Я использовал для этого способ регулярного выражения и сделал это только с одним маршрутом с этим параметром '/ db / user / (: newUser)?'. Не могли бы вы попробовать?