Получить тело запроса из http.IncomingMessage узла node.js

Я пытаюсь реализовать простую конечную точку HTTP для приложения, написанного в node.js. Я создал HTTP-сервер, но теперь я зациклился на чтении тела содержимого запроса:

http.createServer(function(r, s) { console.log(r.method, r.url, r.headers); console.log(r.read()); s.write("OK"); s.end(); }).listen(42646); 

Метод запроса, URL и заголовки печатаются правильно, но r.read() всегда имеет значение NULL. Я могу сказать, что это не проблема в том, как делается запрос, потому что заголовок content-length больше нуля на стороне сервера.

Документация говорит, что r является объектом http.IncomingMessage который реализует интерфейс Readable Stream, поэтому почему он не работает?

Хорошо, я думаю, что нашел решение. r stream (как и все остальное в node.js, глупое меня …) следует читать в async-режиме:

 http.createServer(function(r, s) { console.log(r.method, r.url, r.headers); var body = ""; r.on('readable', function() { body += r.read(); }); r.on('end', function() { console.log(body); s.write("OK"); s.end(); }); }).listen(42646);