这就是我所拥有的:
server.route({
method: 'POST',
path: '/somePath/',
config: {
payload:{
output: 'stream'
}
});
我希望有一个简短的XML,这就是我使用' stream'而不是数据'。我使用FakeToe作为XML解析器,因为它是基于流的,在我的处理函数中我调用request.payload.pipe(parser)
。我想要检查的是请求中是否有任何POST数据,如果没有将错误请求发送回用户。
我已经考虑过在request.payload
流中获取数据的大小,但是如果不首先拉动数据然后将数据推回到流中,似乎没有直接做到这一点,我不会这样做喜欢。
当数据存在时,一切都运行良好,但如果不是,FakeToe不会调用回调函数,并显示错误,说明流是空的。此外,我不想自己调用request.payload.read
方法来检查是否有任何数据。
在hapijs中有什么办法吗?
答案 0 :(得分:3)
您可以使用Joi来验证有效负载的存在。它是Hapi提供的架构和验证模块。它将自动验证在端点接收的任何请求,并在验证失败时使用适当的badRequest消息进行回复。
var Joi = require('Joi');
server.route({
method: 'POST',
path: '/somePath/',
config: {
payload:{
output: 'stream'
}
validate: {
payload: Joi.any().required()
}
});
编辑:
根据此GitHub Issue中的讨论,验证对象如
Joi.object({
pipe: Joi.func().required()
}).unknown();
可用于测试有效负载是否实际上是一个流。
答案 1 :(得分:1)
我想你有content-length header
?您可以从request.headers
检查,而不是阅读有效负载。