我正在使用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 文档强烈暗示默认有效负载验证选项不执行任何有效负载验证,所以我有点惊讶这种情况甚至是一个问题。
我尝试了以下方法:
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 路由?