Я использую 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 текст?