Разбор параметров для выражения конечной точки
У меня работает несколько экспресс-терминалов, которые запрашивают базу данных. Я пытаюсь проанализировать параметры в моем экспресс-шлюзе так:
paths: ['/users', '/users/:userId']
Конечная точка пользователя работает на localhost и /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
2 ответа
Нашел решение. Под действием политики прокси для данной конечной точки мне нужно установить 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
Вы пытались установить ignorePath
в false
? Это должно сработать или, наоборот, просто удалить параметр из файла, так как его значение по умолчанию false