Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从node.js';s http.IncomingMessage_Node.js_Httprequest_Httpserver - Fatal编程技术网

从node.js';s http.IncomingMessage

从node.js';s http.IncomingMessage,node.js,httprequest,httpserver,Node.js,Httprequest,Httpserver,我正在尝试为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()

我正在尝试为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()
始终为空。我可以说,请求的发出方式没有问题,因为
content length
头在服务器端大于零


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”事件错误,它错误地在正文字符串的末尾添加了一个额外的空字符

使用“数据”事件处理具有块的流:

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); 

它不仅是一种异步方法,而且是事件驱动的。您可以有效地使用函数,并且可以将它们作为一级函数传递,还可以使用闭包(匿名函数),这一事实使此方法成为javascript中最重要的编程方法。无论如何,我更喜欢
r.on(“data”,function(chunk))
可以直接处理读取的数据。与
可读
相反,
数据
表示已从流中读取某些内容,而不是可以读取某些内容。无论如何,这是io的首选方式。@BigMan73是正确的-这将在正文字符串的末尾添加一个null。请看他的答案,这应该是正确的答案。