var http=require('http');
var opts={
host:'www.google.com',
port:80,
path:'/',
method:'GET'
};
var req=http.request(opts,function(res){
res.setEncoding('utf8');
//console.log('res');
res.on('data',function(data){
console.log(data);
});
});
req.end();
如上所示,这是很多讲解node书籍中,在http这一章中会出现的实例代码,我刚学习得时候,不明白为什么可以执行,后来在《nodejs开发指南》中得到答案:http.ClientRequest是由http.request()或http.get()返回产生的对象,这个对象表示一个已经产生且正在进行中的http请求。这个很特殊,对象产生就立马执行,普通的对象都是我们需要调用方法才执行的。
注意这里只有在end()方法调用后才执行,因为在那之前,它不确定我们是否还会发送数据,http.get()方法会隐含的调用end()方法,所以可以这样使用:
var http=require('http');
http.get({host:'www.baidu.com'},function(res){
res.setEncoding('utf8');
res.on('data',function(data){
console.log(data);
});
});
注意我们省略了var req这样的变量,执行http.get()方法后,返回的对象会立马执行,因为隐含的调用了end,但是request必须得有这样的变量,因为后续还要使用。