nodejs 内置模块 http、url、path、qs

目录

1. 在nodejs中模块分为三类:

2 内置模块

2.1 HTTP 搭建服务器的

2.2 FS 操作文件夹以及文件的

1 创建文件

2 创建文件夹

3 删除文件:

4 删除文件夹

5 修改文件名称

6 读取文件

7 判断文件的状态

8 读取文件夹

2.3 url模块  实现将url字符串与url对象互相转换

1 parse:将url字符串解析为url对象

2 format:该方法用于实现将url对象再次解析为url字符串

2.4 PATH  处理请求的路径

1 parse:该方法可以实现将路径字符串转为对象

2.4 join:该方法用于拼接路径

2.5 querystring  处理query字符串

1 parse  将query字符串解析为对象


1. 在nodejs中模块分为三类:

​ 1 内置模块 (核心模块),

​ 例如:HTTP、HTTPS、Path、FS、QueryString……

​ 内置的模块可以直接引入并使用,通过require方法直接引入模块名称
 

​ 2 第三方模块 (自定义的模块)

​ 例如:babel-core、typescript

​ 第三方模块需要通过npm安装后才能使用,通过require方法直接引入模块的名称

node_modules

该文件夹用于存储所有的第三方模块,当把文件存储在该文件夹中,我们就可以像引入内置模块那样来引入模块文件了

​ 3 文件模块 (一个文件就是一个模块)

​ 引入文件模块要使用相对路径(相对于当前文件所在的位置,如:./ ../)

2 内置模块

2.1 HTTP 搭建服务器的

创建服务器 createServer(handle(req, res)) 该方法用于搭建HTTP服务器

第一个参数:req对象: 全称request 请求对象,常用的属性:

url(本次请求的路径)

method(本次请求的方式)

headers(请求头对象相关信息)

// 引入HTTP
let http = require('http');

// 创建服务器
let app = http.createServer((req, res, ...args) => {
    // console.log(args.length);

    // // url 本次请求的路径
    console.log(req.url);

    // // method 查看本次请求的方式
    console.log(req.method);

    // // 本次请求头中相关信息
    console.log(req.headers);
})

第二个参数:res对象: 全称response 响应对象,常用的属性:

write(返回数据 不会断开连接 必须与end方法一起使用)

end(返回数据 会断开连接,该方法只接受字符串类型的参数以及Buffer数据类型)

setHeader(用于设置响应头)返回值是服务器对象

// 引入HTTP
let http = require('http');

// 创建服务器
let app = http.createServer((req, res, ...args) => {
    // console.log(args.length);

    // res中的重要属性
    res.write('first send');
    res.write('second send ');

    // 配合end方法使用 (常用的方式)
    //res.end(' send end');
    
    // setHeader 用于设置响应头
    res.setHeader('aa', 'hello');

    // 断开连接
    res.end('end');
})

监听方法

listen(port, ip, handle)

        port: 监听的端口号 不要使用1000以内的(可能被占用)

        ip: 指定的ip地址,可以省略

        handle: 监听成功之后执行的方法

// 引入HTTP
let http = require('http');

// 创建服务器
let app = http.createServer((req, res, ...args) => {
  
   
})

// 监听端口号
app.listen(3000, () => console.log('监听在3000端口号'));

2.2 FS 操作文件夹以及文件的

FS模块全称: file System 文件系统。作用是用于操作文件夹以及文件的,使用的时候要引入fs模块。操作文件是异步的,因此fs模块为每一个操作提供了两个方法:同步方法(sync),异步方法(回调函数监听)

1 创建文件

fs.appendFile(fileName, content, callback)

fs.appendFileSync(fileName, content,)

        fileName: 创建的文件名称(合法的路径)

        content: 追加的内容

        callback: 回调函数, 参数表示错误异常, 如果创建成功 则返回null,如果创建失败 则返回一个错误对象

// 引入fs模块
let fs = require('fs');

// 使用同步方法创建文件  由于同步操作无法捕获异常 通常会放入try catch语句中
try {
    // 这里的第一个参数 必须是合法路径
    fs.appendFileSync('./text.txt', '这是一个纯文本文件');
} catch (err) {
    console.log(222, err);
}

// 异步方法
fs.appendFile('./demo/text.txt', 'hello world', (err) => {
    // 捕获异常
    if (err) {
        throw err;
    }
    console.log('创建文件成功');
})

2 创建文件夹

fs.mkdir(pathName, callback) 该方法用于创建文件夹

        pathName: 文件夹名称

        callback: 回调函数

        参数表示错误异常, 如果创建成功 则返回null,如果创建失败 则返回一个错误对象

// 引入fs模块
let fs = require('fs');

// 同步创建文件夹
try {
    fs.mkdirSync('./tmp');
} catch (err) {
    console.log(111, err);
}


// 异步创建文件夹
fs.mkdir('./tmp', (err) => {
    if (err) {
        throw err;
    }

    // 成功之后 继续创建文件
    fs.appendFileSync('./tmp/text.txt', 'hello');

})

3 删除文件

fs.unlink(fileName, callback) 该方法用于删除文件

        fileName: 要删除的文件

        callback: 回调函数

        参数表示错误异常,如果删除成功 则返回null,如果删除失败 则返回一个错误对象

// 引入fs模块
let fs = require('fs');


// // 删除文件
fs.unlink('./text.txt', (err) => {
    console.log(111, err);
})

4 删除文件夹

fs.rmdir(dirName, callback) 该方法用于删除文件夹(只能删除空文件夹)

        dirName: 要删除的文件夹名称

        callback: 回调函数,参数表示错误异常,如果删除成功 则返回null,如果删除失败 则返回一个错误对象

// 引入fs模块
let fs = require('fs');

// 删除文件夹  不能删除非空目录
fs.rmdir('./tmp', (err) => {
    console.log(111, err);
})

5 修改文件名称

fs.rename(oldName, newName, callback) 该方法用于修改文件名称

        oldName: 被修改的文件名称

        newName: 被替换的文件名称

        callback: 回调函数,参数表示错误异常,如果修改成功 则返回null,如果修改失败 则返回一个错误对象

// 引入fs模块
let fs = require('fs');

// 定义原始路径
let oldPath = './tmp/text.txt';
// 定义新路径
let newPath = './demo/abc.txt';
// 修改文件名称  将tem文件夹中的text.txt改名为abc.txt,并且将其存储路径改为demo文件夹中
fs.rename(oldPath, newPath, (err) => {
    console.log(111, err);
})

// 总结: rename方法不仅可以更换文件的名称 还可以实现更改文件存储的目录

6 读取文件

fs.readFile(fileName, callback(err, data)) 该方法用于读取文件

        fileName: 要读取的文件名称

        callback(err, data): 回调函数,第一个参数:错误异常(如果创建成功 则返回null,如果创建失败 则返回一个错误对象); 第二个参数 读取成功时候的数据(默认是Buffer数据 我们可以调用toString方法转为字符串之后查看)

// 引入fs模块
let fs = require('fs');

// 读取文件
fs.readFile('./demo/abc.txt', (err, data) => {
    console.log(111, err, 222, data, 333, data.toString());
    //111 null 222 <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64> 333 hello world
})

7 判断文件的状态

fs.stat(targetName, callback(err, state)) 该方法用于判断文件的状态

        targetName: 要判断的文件名称

        callback(err, state): 回调函数,有两个参数:第一个参数是错误异常;第二个 是状态对象

我们可以通过状态对象调用isDirectory,如果为真 则表示是文件夹,如果为假 则表示文件

// 引入fs模块
let fs = require('fs');

// 判断文件
fs.stat('./demo', (err, state) => {
    // console.log(111, err, 222, state);
    // 判断文件的状态
    console.log(111, state.isDirectory());
    // 111 true
})


fs.stat('./demo/abc.txt', (err, state) => {
    // console.log(111, err, 222, state);
    // 判断文件的状态
    console.log(222, state.isDirectory());
    // 222 false
})

8 读取文件夹

fs.readdir(dirName, callback) 该方法用于读取文件夹

        dirName: 读取的文件夹的名称

        callback: 回调函数,有两个参数,第一个参数表示错误异常,第一个参数是一个数组,数组中的每一项都是读取到的每一个文件,注意:在fs模块中,方法后面加上Sync就是同步的

// 引入fs模块
let fs = require('fs');

// 读取文件夹
fs.readdir('./demo', (err, arr) => {
    console.log(111, err, 222, arr);
    //111 null 222 [  '新建文件夹',  '新建文件夹 - 副本',  '新建文本文档.txt' ]
})

2.3 url模块  实现将url字符串与url对象互相转换

1 parse:将url字符串解析为url对象

使用方式:url.parse(url_str, bool)

        url_str: url字符串

        bool: 是一个布尔值

        默认是false

// 引入url模块
let url = require('url');

// 定义路径
let str = 'localhost:3000/index.html?color=red&num=100';
// parse方法 将url字符串转为url对象
let str_obj = url.parse(str);
console.log(str_obj);  


// Url {
//     protocol: 'localhost:',
//     slashes: null,
//     auth: null,
//     host: '3000',
//     port: null,
//     hostname: '3000',
//     hash: null,
//     search: '?color=red&num=100',
//     query: 'color=red&num=100',
//     pathname: '/index.html',
//     path: '/index.html?color=red&num=100',
//     href: 'localhost:3000/index.html?color=red&num=100'
//   }

当传递true的时候,会将url对象中的query部分变为对象

// 引入url模块
let url = require('url');

// 定义路径
let str = 'localhost:3000/index.html?color=red&num=100';

let str_obj = url.parse(str, true);

console.log(str_obj);

// Url {
//     protocol: 'localhost:',
//     slashes: null,
//     auth: null,
//     host: '3000',
//     port: null,
//     hostname: '3000',
//     hash: null,
//     search: '?color=red&num=100',
//     query: [Object: null prototype] { color: 'red', num: '100' },  这里
//     pathname: '/index.html',
//     path: '/index.html?color=red&num=100',
//     href: 'localhost:3000/index.html?color=red&num=100'
//   }

2 format:该方法用于实现将url对象再次解析为url字符串

// 引入url模块
let url = require('url');

// 定义路径
let str = 'localhost:3000/index.html?color=red&num=100';

let str_obj = url.parse(str, true);

// format 实现将url对象再次解析为字符串
console.log(url.format(str_obj));

//localhost:3000/index.html?color=red&num=100

2.4 PATH  处理请求的路径

1 parse:该方法可以实现将路径字符串转为对象

// 引入path模块
let path = require('path');

// 定义路径
let str = 'localhost:3000/index.html';

// parse方法 实现将路径字符串转为对象
let path_obj = path.parse(str);

console.log(path_obj);
// {
//     root: '',
//     dir: 'localhost:3000',
//     base: 'index.html',
//     ext: '.html',
//     name: 'index'
// }


console.log(path_obj.ext);  //.html

2  join:该方法用于拼接路径

使用方式:path.join(path1, path2 ...)

// 引入path模块
let path = require('path');

console.log(path.join('/web/', 'index.html'));
//  \web\index.html

console.log(path.join('/web/', 'index.html', 'abc'));
//  \web\index.html\abc

console.log(path.join('/web/eee/', '../aaa.html'));  //这个../就退出eee这个目录了
//  \web\aaa.html

3 获取后缀名称 path.extname(str)

// 引入path模块
let path = require('path');

// 定义路径
let str = 'localhost:3000/index.html';

// parse方法 实现将路径字符串转为对象
let path_obj = path.parse(str);

// 获取文件的后缀名称
console.log(path_obj.ext);

// 获取后缀名称的第二种方式 extname方法
console.log(path.extname(str));

2.5 querystring  处理query字符串

该模块的作用是用于处理query字符串或者是类似query的字符串; 

query字符串: ‘a=1&b=2’

类似query的字符串: ‘a:1$b:2’

1 parse  将query字符串解析为对象

qs.parse(query_str, bigSplit, smallSplit) 

        query_str: 要处理的字符串

        bigSplit: 大的分隔符 默认是 &

        smallSplit: 小的分隔符 默认是 =

// 引入qs
let qs = require('querystring');

// 定义query字符串
let query_str = 'color=red&num=100';

console.log(qs.parse(query_str, '&', '='));  //{ color: 'red', num: '100' }

//第二、三个参数默认值: &  =  与上面一样
console.log(qs.parse(query_str));    //{ color: 'red', num: '100' }
 

// 定义类似于query字符串数据
let query_lick = 'color:red$num:100'

console.log(qs.parse(query_lick, '$', ':'));   //{ color: 'red', num: '100' }

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值