如何检查带有hapijs的请求中是否有任何有效负载(POST)数据?

时间:2015-04-02 23:00:38

标签: javascript node.js validation hapijs

这就是我所拥有的:

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中有什么办法吗?

2 个答案:

答案 0 :(得分:3)

您可以使用Joi来验证有效负载的存在。它是Hapi提供的架构和验证模块。它将自动验证在端点接收的任何请求,并在验证失败时使用适当的badRequest消息进行回复。

var Joi = require('Joi');

server.route({
        method: 'POST',
        path: '/somePath/',
        config: {
          payload:{
                output: 'stream'
            }
          validate: {
                payload: Joi.any().required()
            }
        });

有关此herehere的更多信息。

编辑:

根据此GitHub Issue中的讨论,验证对象如

Joi.object({
    pipe: Joi.func().required()
}).unknown();

可用于测试有效负载是否实际上是一个流。

答案 1 :(得分:1)

我想你有content-length header?您可以从request.headers检查,而不是阅读有效负载。