NodeJS系列之二:NodeJS内置http模块初识

1.http模块能做什么

对于NodeJS来说比较重要的一块就是http模块,我们使用http模块可以自己搭建服务器,从而监听客户端的一些请求,和客户端合作接受请求并且返回数据。

2.http模块搭建简易服务器

在使用NodeJS的http模块搭建服务器中,我们需要使用到http.createServer()方法,在这中间我们需要注意下面这几个点:

  1. 必需首先引入http模块:require(‘http’)
  2. http.createServer()方法参数是一个回调函数,回调函数参数包括前端发送的请求request和服务器返回的数据response:

    http.createServer(function (request, response) {
    })
  3. 服务器必需使用listen()方法监听相应端口号:

    http.createServer(function (request, response) {
    }).listen(port)

    整合一个简易完整服务器的创建代码如下:
var http=require('http');//引入http模块
http.createServer(function(req,res){//创建服务器并且回调
    console.log('有人访问服务器');//每一次访问服务器打印的日志
    res.write('shhshs');//访问服务器返回的数据
    res.end();//执行完毕,可带参数,执行完毕运行返回
}).listen(8080);//监听8080端口

访问响应的数据显示和终端日志如下:这里写图片描述
这里写图片描述

3.NodeJS的GET请求

对于GET请求我们是将传给后端的参数直接带在链接地址上,所以GET请求参数有大小限制,类似于:http://localhost/index.html?name=aaa&age=10对此在NodeJS中解析前台GET请求传过来的数据有以下三种方法:

  1. 通过split方法自己切割
var http=require('http');
http.createServer(function(req,res){
    var GET={}; //存储get请求传过来的json字符串数据
    if(req.url.indexOf('?')!=-1){
        var arr=req.url.split('?');
        var url=arr[0]; //页面地址  index.html
        var arr2=arr[1].split('&');
        for(var i=0;ivar arr3=arr2[i].split('=');
            GET[arr3[0]]=arr3[1];   //name => 'aaa'  age => '10'
        }
    }else{
        var url=req.url;    //每次都会请求favicon.ico
    }
    console.log(url,GET);
    res.write('12233');
    res.end();
}).listen(8080);
  1. 通过NodeJS的querystring模块方法
var http=require('http');
var querystring=require('querystring');
http.createServer(function(req,res){
    var GET={};
    if(req.url.indexOf('?')!=-1){
        var arr=req.url.split('?');
        var url=arr[0];
        GET=querystring.parse(arr[1]);  //直接对于 name=aaa&age=10 这样的数据转换成{name:'aaa',age:'10'}
    }else{
        var url=req.url;
    }
    console.log(url,GET);
    res.write('12233');
    res.end();
}).listen(8080);
  1. 通过NodeJS的url模块方法
var http=require('http');
var urlLib=require('url');
http.createServer(function(req,res){
    var obj=urlLib.parse(req.url,true);//true 参数会将query数据解析成{name:'aaa',age:'10'},否则的话 user=123&pass=11111
    var url=obj.pathname;
    var GET=obj.query;
    console.log(url,GET);
    res.write('shhshs');
    res.end();
}).listen(8080);

开启服务器,收到的解析后数据格式如下:
这里写图片描述

4.NodeJS的POST请求

对于POST请求我们是将请求参数放在requestBody上,所以POST请求适合提交比较大的数据,类似于文件,图像都可以,对此在NodeJS中解析前台POST请求传过来的数据可以直接使用querystring模块方法,而且当传送大的数据时,我们采用分段传输:

var http=require('http');
var querystring=require('querystring');
http.createServer(function(req,res){
    var str='';
    var i=0;
    // on 表示监控
    req.on('data',function(data){//当数据大时分段传输 data——有一段数据到达(很多次)
        console.log(`这是第${i++}次接收到数据`);
        str+=data;
    })
    req.on('end',function(){//end——数据全部到达(一次) 当数据全部传输完运行
        var POST=querystring.parse(str);
        console.log(POST);
    })
}).listen(8080);

开启服务器,收到的解析后数据格式如下:

这里写图片描述


以上是NodeJS关于HTTP模块学习的一些简单使用以及自己写的一些小测试,后续会逐渐深入。

你可能感兴趣的:(NodeJS)