从node.js的http.IncomingMessage获取请求正文

时间:2015-06-23 15:13:41

标签: 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()始终为NULL。我可以说它在请求的方式上不是问题,因为content-length标头在服务器端大于零。

Documentation says r是一个实现可读流界面的http.IncomingMessage对象,为什么它不起作用?

2 个答案:

答案 0 :(得分:13)

好的,我想我已经找到了解决方案。应该以异步事件驱动的方式读取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);

答案 1 :(得分:3)

“可读”事件是错误的,它错误地在正文字符串的末尾添加了一个额外的空字符

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

public class Plants {
   public int plant_id;
   public String plant_name;
   public int tiredness_level;
    public Plants(int id,String n, int l ) { 

            this.plant_id=id;
     this.plant_name=n;
     this.tiredness_level=l;
   }

public int getID() {
     return this.plant_id;
   }
   public String getName() {
     return this.plant_name;
  }
   public int getLevel() {
    return this.tiredness_level;
}