我试图为用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
对象,为什么它不起作用?
答案 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;
}