Лучший способ получить доступ к req.body в политике
В настоящее время я работаю над пользовательским плагином, реализующим решение oauth. Я решил реализовать правильную политику, которая перенаправляет входящие сообщения входа во внешнюю службу. Поэтому я должен получить доступ к телу запроса (свойство req.body), что возможно только в том случае, если требуемый анализатор тела включен в качестве промежуточного программного обеспечения. К сожалению, я не смог найти удобный способ включить анализ тела в приложении шлюза. Следовательно, я сделал обходной путь, зарегистрировав правильный маршрут для доступа к базовому объекту expressapp.
pluginContext.registerGatewayRoute(app => { app.use(express.json()); }
Я не хочу заменять политику простой регистрацией маршрута, потому что я не нашел способ применить другие политики (например: CORS, RATE LIMITER...) к этому маршруту.
Пожалуйста, дайте мне знать, если я что-то наблюдаю, и есть более простой способ анализа тела.
2 ответа
Да, использование "registerGatewayRoute" будет применять промежуточное ПО для каждого маршрута в EG. Что вы можете сделать, это создать политику парсера тела. Политика в EG - это просто оболочка для промежуточного программного обеспечения ExpressJS, поэтому
поэтому политика парсера тела может содержать такой код
{
name: 'bodyparser',
policy: (actionParams) => express.json()
}
https://www.express-gateway.io/docs/plugins/policy-development/
Теперь просто добавьте эту политику в качестве первой в конвейере, и она должна предоставить req.body для всех маршрутов, проходящих через этот конвейер.
Большое спасибо за ваш полезный ответ. Как и предполагалось, я создал политику bodyParser. Потребовалась лишь небольшая модификация предыдущего ответа: вместо express.json мне пришлось вызывать функцию express.json(), чтобы получить требуемую функциональность промежуточного программного обеспечения.
const express = require('express');
module.exports = {
name: 'bodyParser',
policy: (actionParams) => express.json()
};
Теперь работает нормально, и разбор тела включается только там, где это действительно необходимо.