Я определил свое пользовательское промежуточное ПО, как показано ниже. Он в основном выбирает параметры формы в формате urlencoded и устанавливает строку urlencoded в заголовки для последующего использования. Мне пришлось пойти по этому пути, потому что для запросов типа application/x-www-form-urlencoded
только koa-bodyparser поддерживает получение необработанной строки в кодировке urlencoded с параметрами формы. Однако я не могу использовать его из-за того, что он не поддерживает файлы.
Мое промежуточное программное обеспечение определено ниже:
const rawBody = require('raw-body')
const contentType = require('content-type')
function rawUrlEncodedFormData() {
return async function setUrlEncodedHeader(ctx, next) {
if (ctx.path === '/v1/urlencoded') {
const rawRequestBody = await rawBody(ctx.req, {
length: ctx.get('content-length'),
encoding: contentType.parse(ctx.req).parameters.charset,
})
const urlEncodedString = rawRequestBody.toString('utf-8')
console.log('form urlencoded params:', urlEncodedString)
ctx.set('urlencoded-form-string', urlEncodedString)
await next()
}
await next()
}
}
module.exports = rawUrlEncodedFormData
Затем я использую его вместе с другими промежуточными программами, такими как:
const middlewares = () =>
koaCompose([
Cors(),
requestId(),
logger(log),
responseTime({
logger: log,
}),
rawUrlEncodedFormData(),
koaBody({
multipart: true,
}),
redis({
redisURL: config.redis.url,
}),
authorize(),
])
module.exports = middlewares
Однако, когда я выполняю вызов этой конечной точки:
1. Строка параметров формы urlencoded выбрана правильно.
2. Запрос (и приложение) просто зависает после
Есть что-то, чего мне не хватает? Функция контроллера, зарегистрированная для этого маршрута, вообще не вызывается. Вместо этого я получаю следующую ошибку
«запрос прерван», «имя»: «BadRequestError», «стек»: «BadRequestError:
запрос прерван \ n на IncomingMessage.onAborted