Как принять простой текст в обработчике маршрута - PullRequest
1 голос
/ 12 июля 2019

Я использую FilePond для загрузки файлов в API hapi.js 17.9.FilePond позволяет автоматически загружать файлы после того, как пользователь выбрал файл, и имеет пользовательский интерфейс для удаления / возврата / отмены загруженного файла.Согласно документации FilePond ...

FilePond отправляет запрос DELETE с 12345 в качестве тела, нажимая кнопку отмены

, где 12345 - идентификатор, предоставленныйсервер, когда файл был загружен.Обратите внимание, что это не JSON, это текстовое тело.

У меня есть маршрут hapi.js, настроенный для обработки методов DELETE с настройками проверки по умолчанию.Когда FilePond отправляет свой запрос, Hapi отвечает 400 ошибкой, прежде чем код моего обработчика выполнится, и печатает это сообщение в консоли:

Validation-failAction:error ValidationError: "value" must be an object
    at Object.exports.process (/home/lamont/projects/rooster/api/node_modules/hapi/node_modules/joi/lib/errors.js:203:19)
    at internals.Object._validateWithOptions (/home/lamont/projects/rooster/api/node_modules/hapi/node_modules/joi/lib/types/any/index.js:764:31)
    at module.exports.internals.Any.root.validate (/home/lamont/projects/rooster/api/node_modules/hapi/node_modules/joi/lib/index.js:147:23)
    at Object.internals.input (/home/lamont/projects/rooster/api/node_modules/hapi/lib/validation.js:83:63)
    at exports.payload (/home/lamont/projects/rooster/api/node_modules/hapi/lib/validation.js:50:22)
    at Request._lifecycle (/home/lamont/projects/rooster/api/node_modules/hapi/lib/request.js:263:62)
    at process._tickCallback (internal/process/next_tick.js:68:7)

Документы hapi настоятельно подразумевают опции проверки полезной нагрузки по умолчанию не проверяйте полезную нагрузку, поэтому я немного удивлен, что этот сценарий даже является проблемой.

Я пробовал следующее:

options.payload= {parse: false}

options.payload= {allow: "text\*"}

options.validate= { payload: async (v, o) => { return v } }

options.validate= { payload: true }

options.validate= { payload: false }

options.validate= undefined

options.validate= null

Редактировать: По предложению одного из парней из моей команды я также попробовал

options.validate : { payload: (() => { return Joi.string(); })() }

и определил параметры маршрута без свойства validateвообще (что должно быть функционально эквивалентно явному неопределенному, но кто знает).

Во всех этих случаях я все еще получаю вышеуказанную ошибку проверки.Разве невозможно написать хапи-маршрут, который принимает простой, не-json текст?

...