我正在使用FilePond将文件上传到hapi.js 17.9 API。 FilePond允许用户选择文件后自动上传,并具有用于删除/还原/撤消上载文件的UI。根据FilePond的文档...
FilePond通过点击“撤消”按钮,以12345作为正文发送DELETE请求
其中 12345 是文件上传时服务器提供的ID。请注意,这不是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文档强烈暗示default payload validation options不执行任何有效负载验证,因此令我感到惊讶的是,这种情况甚至是一个问题。
我尝试了以下操作:
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属性(在功能上应该等效于显式的undefined但谁知道)。
在所有这些情况下,我仍然收到上述验证错误。难道不可能写一个接受纯非json文本的hapi路由吗?