У меня есть микросервис, который проксирует каждый запрос, добавляя к нему еще одно поле. С обычными запросами это очень просто, просто добавьте поле в request.body и правильно установите заголовки, но для запросов multipart / form-data у меня проблемы с днями, потому что, если я добавлю поле в request.body , он исчезнет.
const router = express()
const routes = require('~/routes')
const passport = require('passport')
const proxy = require('http-proxy-middleware')
router.use(passport.initialize())
require('./modules/passport-jwt')(passport)
router.use('/', routes)
router.use(
'/account',
passport.authenticate('jwt', { session: false }),
proxy({
target: process.env.ACCOUNT_SERVICE,
pathRewrite: { '/account': '/' },
onProxyReq: restream
})
)
const restream = async function (proxyReq, req, res, options) {
if (req.user) {
if (
req.headers['content-type'] &&
req.headers['content-type'].match(/^multipart\/form-data/)
) {
req.body.reqUser = req.user
} else {
const requestBody = JSON.stringify({ ...req.body, reqUser: req.user })
proxyReq.setHeader('Content-Type', 'application/json')
proxyReq.setHeader('Content-Length', Buffer.byteLength(requestBody))
proxyReq.write(requestBody)
}
}
}
Когда запрос поступает в другой микросервис, request.body будет пустым и после его записи multer , который поместит параметры multipart / form-data в request.body .
Мне действительно нужно решение, которое позволит мне добавить поле в multipart /запрос данных формы в функции прокси restream .
Я попробовал все, чтобы преуспеть в этом, но я застрял. Я надеюсь, что все ясно с моей стороны. Не бойтесь спрашивать подробности, если они вам нужны. Я прошу вашей помощи.