从 node.js 的 http.IncomingMessage 获取请求 body
Get request body from node.js's http.IncomingMessage
我正在尝试为用 node.js 编写的应用程序实现一个简单的 HTTP 端点。我已经创建了 HTTP 服务器,但现在我一直在阅读请求内容 body:
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和header打印正确,但是r.read()
总是NULL。我可以说请求的方式不是问题,因为 content-length
header 在服务器端大于零。
Documentation says r
是一个 http.IncomingMessage
object 实现了 Readable Stream 接口,为什么它不起作用?
好的,我想我已经找到了解决方案。 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);
我正在尝试为用 node.js 编写的应用程序实现一个简单的 HTTP 端点。我已经创建了 HTTP 服务器,但现在我一直在阅读请求内容 body:
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和header打印正确,但是r.read()
总是NULL。我可以说请求的方式不是问题,因为 content-length
header 在服务器端大于零。
Documentation says r
是一个 http.IncomingMessage
object 实现了 Readable Stream 接口,为什么它不起作用?
好的,我想我已经找到了解决方案。 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);