求助,关于clientRequest和clientResponse
发布于 8 年前 作者 StudentWan 3666 次浏览 来自 问答

最近在看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>

实在搞不懂… 求各位大牛帮助

2 回复

书中示例的返回如下,可能因为服务器没有了,所以返回了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); //输出内容
});
}); 大致是这样了。

回到顶部