最近在看BYVoid大神的《Node.js开发指南》,关于HTTP客户端那一块儿感觉理解不是很透彻…
文中说http.request会返回一个已经产生并正在进行中的HTTP请求,我的理解是请求头已经发送后,返回一个http.clientRequest对象,并调用回调函数,发送一个http.clientResponse,那么这个clientResponse监听的data事件具体是什么data事件呢?
我的理解是这个clientResponse会监听服务器返回的data,也会监听clientRequest写入请求体的data,不知道对不对。
根据书中的代码(如下)
var http = require('http');
var querystring = require('querystring');
var contents = querystring.stringify({
name: 'byvoid',
email: 'byvoid@byvoid.com',
address: 'Zijing 2#, Tsinghua University',
});
var options = {
host: 'www.byvoid.com',
path: '/application/node/post.php',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length' : contents.length
}
};
var req = http.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function (data) {
console.log(data);
});
});
req.write(contents);
req.end();
打印出的值应该是既有服务器返回的值也有contents,可是我的返回只有如下的东西:
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.6.2 (Ubuntu)</center>
</body>
</html>
实在搞不懂… 求各位大牛帮助
书中示例的返回如下,可能因为服务器没有了,所以返回了301,可是为什么contents没有了我不是很理解… array(3) { [“name”]=> string(6) “byvoid” [“email”]=> string(17) "byvoid@byvoid.com" [“address”]=> string(30) “Zijing 2#, Tsinghua University” }
代码里面少了一些步骤,我帮你一些部分补全吧。。post模式应该这样:
var req = http.request(options, function(res) {
res.setEncoding(‘utf8’);
var body = “”; //定义一个内容
res.on(‘data’, function (doc) {
body += doc; //保存内容
})
.on(‘end’, function () {
console.log(body); //输出内容
});
});
大致是这样了。