当前位置: 首页 > 工具软件 > node-abc > 使用案例 >

Node.js——http && fs模块

郑曜灿
2023-12-01

http模块


使用方式


1. 引入http模块

const http = require('http');


2. 创建http.createServer对象


var server = http.createServer(function(req,res){});

这是一个函数,它有两个参数

   request    请求    浏览器输入的请求信息

   response   响应    输出到浏览器的信息


补充:

参数名可以随便取

通常request简写成req,response简写成res


函数内部方法:

   res.write()   输出到前台

   res.end()     结束请求


3. 监听端口


server.listen();


实例

const http = require('http');

var server = http.createServer(function(req,res){
        switch(req.url){
            case '/1.html':
                res.write('111');
                break;

            case '/2.html':
                res.write('222');
                break;

            default:
                res.write('404');
                break;
        }

    res.end();
});

server.listen(8811);



fs文件模块


使用方式


1. 引入fs模块

const fs = require('fs');


2. 方法

readFile()      读取文件

writeFile()     写入文件


readFile( 路径,(编码方式,)回调函数)


1. 编码方式可以忽略


2. 回调函数有2个参数,一个是err(错误),一个是data


3. 在获取data时调用toString方法


实例


读取aaa.txt里面的内容

fs.readFile('aaa.txt',function(err,data){
    if(err){
        console.log('读取失败');
    }else{
        console.log(data.tostring());
    }
})


writeFile( 路径,内容,回调函数)


实例


向bbb.txt文件写入“shesfjh”。

fs.writeFile('bbb.txt','shesfjh',function(err){
    console.log(err);
});



结合HTTP使用


首先,创建一个www文件,里面存放允许外部访问的文件。

假设,现在别人请求了一个index.html。


req.url = "/index.html"

我们要读取www下的html ,就是 "./www/index.html"

也就是 "./www" + req.url


请看代码:

const http = require('http');
const fs = require('fs');

var server = http.createServer(function(req,res){
    var file_name= './www'+req.url;
    fs.readFile(file_name,function(err,data){
        if(err){
            console.log('404');
        }
        else{
            res.write(data);
        }
        res.end();
    });
});

server.listen(8800);



HTTP数据解析——GET


数据请求:

前台——>from、ajax、jsonp

后台——>大体都一样


请求方式:

GET 数据在url中


传统方法解析数据


get数据在 “请求地址” + ?的后面


例如:

 /aaa?user=sas&pass=asd

 请求地址    /aaa  

 数据       user=sas&pass=asd  

所以,只要我们使用数组的split方法,便可以获得我们想要的数据。


实例:

const http = require('http');

var server = http.createServer(function(req,res){
    var GET={};

    if(req.url.indexOf('?')!=-1){

        var arr=req.url.split('?');   //req获取前台的请求数据

        var url = arr[0];      //arr[0]=>>地址  '/aaa'
                               //arr[1]=>>数据  'user=sas&pass=asd'


        var arr2 = arr[1].split('&');   //arr2=>['user=sas','pass=asd']


        for(var i = 0; i < arr.length; i++){
            var arr3 = arr2[i].split('=');

            //arr3[0]=>>名字  'user'
            //arr3[1]=>>数据  'sas'

            GET[arr3[0]]=arr3[1];
         }
    }
    else{
        var url = req.url;
    }
    console.log(url,GET);
    res.end();

});
server.listen(8811);


简单方法——querystring模块

使用querystring,可以快捷解析出我们的数据。


使用步骤


1)引入querystring
const querystring = require('querystring');

2)建立http.createServer对象,监听端口

3)函数内声明GET为一个{}空对象
var GET={};

4)判断是否有数据?
if(req.url.indexOf('?')!=-1)

5)执行体内部对req.url进行分割var arr=req.url.split('?');

6)让GET等于querystring.parse(数据) GET = querystring.parse(arr[1]);



实例

const http = require('http');
const querystring = require('querystring');

var server = 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]);
    }
    else{
        var url = req.url;
    }
    console.log(url,GET);
    res.end();

});
server.listen(8811);


简单方法——url模块

使用url模块,也能达到解析数据的目的。


语法:

parse(完整地址, true)

返回值是一个对象。


解析后有用的属性:

    pathname    请求地址

    query       数据

注意,选择true才可以解析query的参数。



实例

const http = require('http');
const urlLib = require('url');

var server = http.createServer(function(req,res){

    var obj = urlLib.parse(req.url,true);

    var url = obj.pathname;
    var GET = obj.query;


    console.log(url,GET);
    res.end();

});
server.listen(8811);



HTTP数据解析——POST

post数据量大,要分段接收。


首先,我们先介绍关于req的两个方法

req.on('data',回调函数)     data有一段数据到达,就发生一次

req.on('end',回调函数)      数据全部到达的时候,只发生一次。



const http = require('http');
const querystring = require('querystring');

var server = http.createServer(function(req,res){
    //声明一个空字符串,用来接受数据
    var str='';

    //data有一段数据到达,就发生一次
    var i=0;
    req.on('data',function(data){
        console.log(`第${i++}次收到数据`);
        str+=data;
    });

    //数据全部到达的时候,只发生一次。
    req.on('end',function(){
        var POST = querystring.parse(str);
        console.log(POST);
    });
});

server.listen(8813);



整合http和fs模块


const http = require('http');
const fs = require('fs');
const querystring = require('querystring');
const urlLib = require('url');

var server = http.createServer(function(req,res){
    //GET
    var obj = urlLib.parse(req.url,true);

    var url = obj.pathname;
    const GET = obj.query;

    //POST
    var str='';
    req.on('data',function(data){
        str+=data;
    });

    req.on('end',function(){
        var POST = querystring.parse(str);


        /* ***************************
            目前完成了url——要什么
                    GET——get数据
                    POST——post数据
         *************************** */

    });
    //文件请求
    var file_name= './www'+url;
    fs.readFile(file_name,function(err,data){
        if(err){
            res.write('404');
        }
        else{
            res.write(data);
        }
        res.end();
    });
});

server.listen(8813);
 类似资料: