我正在尝试为node.js编写的应用程序实现一个简单的HTTP端点。我已经创建了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
头在服务器端大于零。
Documentation says r
是一个实现可读流接口的http.IncomingMessage
对象,为什么它不起作用?
好的,我想我找到了解决方案。 r
流(就像node.js中的其他所有内容一样,愚蠢的我......)应该以异步事件驱动的方式读取:
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);
'readable'事件是错误的,它错误地在主体字符串的末尾添加了一个额外的空字符
使用“data”事件使用块处理流:
http.createServer((r, s) => {
console.log(r.method, r.url, r.headers);
let body = '';
r.on('data', (chunk) => {
body += chunk;
});
r.on('end', () => {
console.log(body);
s.write('OK');
s.end();
});
}).listen(42646);