Лучший способ получить доступ к 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()
};

Теперь работает нормально, и разбор тела включается только там, где это действительно необходимо.

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