如何在hapi中解析读取流?

时间:2015-07-16 20:50:38

标签: node.js stream hapijs

如何在hapi服务器处理程序中解析和验证http发送的可读流有效负载? Handler代码目前看起来像这样

{
    method: 'POST',
    path: '/',
    handler: function (request, reply) {

        request.payload.pipe(process.stdout);
        return reply('Success');
    }
}

1 个答案:

答案 0 :(得分:1)

简短说明:您无需解析它,默认情况下为自动。只需按照正常请求的相同方式进行验证。

默认情况下,hapi会将来自分块编码传输的可读流缓冲到内存中,然后尝试为您解析,具体取决于请求Content-type标头。只有在流结束后,处理程序才会运行。这是因为payload config设置的默认选项。

server.route({
    config: {
        payload: {
            output: 'data',   // These are default options
            parse: true       // These are default options
        }
    }
    method: 'POST',
    path: '/',
    handler: function (request, reply) {

        console.log(request.payload); // This is an Object
        return reply('Success');
    }
});

因此,如果客户端发送JSON请求,request.payload将是JavaScript对象,而不是流。您可以使用Joi将其作为普通对象进行验证。