Node中http模块详解(客户端篇)

上一篇说到了http模块的服务器篇,在这个文章里面我们讨论一下http模块的客户端篇

1.http客户端

http模块提供了两个函数http.requesthttp.get,功能是客户端向服务器端发送请求。

1.1 http.request

http.request(options,callback)用于发起http请求,接收两个参数,options是一个类似关联数组的对象,里面包含一些请求的参数,callback表示请求后的回调。options常用的参数如下:

名称含义
host请求网站的域名或IP地址
port请求网站的端口,默认是80
methods请求方法,默认是GET
path请求的相对于根的路径,默认是”/”。QueryString含在其中,例如/search?query=helios
headers一个关联数组对象,为请求头的内容

还要注意一点http.ClientRequest对象由http.request()创建并返回,也就是说http.request返回一个http.ClientRequest的实例
下面来看一组本机客户端发给本机服务器的程序

var http=require('http');
var querystring=require('querystring');
//启动服务
http.createServer((req,res)=>{
    console.log("request already come");
    var post = "";
    req.on('data',(chunk)=>{
        post += chunk;
    });
    req.on('end',()=>{
        //querystring.parse  将字符串转换为json的格式
        post =  querystring.parse(post);
        console.log('complete complished');
        //返回请求者一个信息
        res.write(post.name);
        res.end();
    });
}).listen(3000);

//将一个对象转换为json的字符串
var contents  =  querystring.stringify({
    name:'helios',
    age:21,
    address:'changsha'
});
//声明请求的参数 options
var options={
    host:'localhost',
    path:'/',
    port:3000,
    method:'POST',
    headers:{
        'Content-Type':'application/x-www-form-urlencoded',
        'Content-Length':contents.length
    }
};


//开始发送请求
var req  =  http.request(options,(res)=>{
    res.setEncoding('utf-8');
    res.on('data',(data)=>{
        console.log('return :');
        console.log(data);
    });

});

req.write(contents);
req.end();

1.2get方法

http模块还提供了http.get(options,callback),用来更简单的处理GET方式的请求,它是http.request的简化版本,唯一的区别在于http.get自动将请求方法设为GET请求,同时不需要手动调用req.end();
这个就好像jQuery中的$.ajax$.GET的区别。
下面来看一下具体代码:

var http=require('http');
var querystring=require('querystring');
var url = require('url');

http.createServer(()=>{
    console.log('request come');
    //将传过来的URL转变为对象
    var params = url.parse(req.url,true);
    console.log('解析完成');
    //打印这个对象的字符串形式
    console.log(util.inspect(params));
    console.log('向客户端返回');
    res.end(params.query.name);
}).listen(3000);
//客户端请求
var request=http.get({
    host:'localhost',
    path:'/user?name=helios&age=22',
    port:3000},function(res){
    res.setEncoding('utf-8');
    res.on('data',function(data){
        console.log(' 服务端相应回来的数据为:'+data);
    })
});
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值