Чтение данных из IncomingMessage без использования в Node.js (Hapi.js) - PullRequest
0 голосов
/ 09 мая 2018

На сервере Node.js запросы являются экземплярами IncomingMessage . В свою очередь, IncomingMessage реализует интерфейс Readable Stream .

Если мы хотим вывести все тело запроса, мы должны реализовать что-то вроде этого:

req.on('data', chunk => {
   console.log(chunk.toString());
});

Но этот фрагмент кода потребляет данные в потоке, и мне нужно, чтобы эти данные оставались в потоке для последующего использования. Есть ли способ прочитать данные из потока, не потребляя их?

Если нет, возможно ли переместить данные в очередь для потоковой передачи?

В моем случае я использую Hapi.js. Доступ к потоку запросов можно получить через request.raw.req. Мой код выглядит так:

const server = Hapi.server({ port: 3000, host: 'localhost' });

server.route({
    method: 'POST',
    path: '/',
    handler: (request, h) => {
        var req = request.raw.req;    // Get the IncomingMessage

        req.on('data', chunk => {
           console.log(chunk.toString());
        });
        return 'Hello, world!';
    }
});
server.start();

1 Ответ

0 голосов
/ 14 мая 2018

Добавление следующих параметров маршрута делает свое дело:

options: {
    payload: {
        output: 'data',
        parse: false
    }
}

Это заставляет Hapijs читать полезную нагрузку и выводить ее как данные, т.е. то есть request.payload будет Buffer вместо потока.

Опция разбора не обязательна. Если установлено значение false, Hapijs будет игнорировать тип содержимого запроса и не будет пытаться его проанализировать.

...