目录
2 format:该方法用于实现将url对象再次解析为url字符串
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' }