模块介绍
1.什么是模块
每个js文件都可以是模块,能够实现一定的功能,方便开发和维修。模块化开发可以让程序员在开发过程中分工合作,每个功能写一个模块,每个模块都有一个操作,最后只需要在主模块中引入,即可使用别的模块,达到整合效果。
2.模块的分类
(1)官方模块
node.js官方模块,就是自己自带的模块,不需要下载,可以直接使用,大概20几个,常用的也只有几个,也正是因为官方模块提供的东西少,加上使用的是Google浏览器的v8引擎,所以速度非常快,这也是node.js最大的特点。
(2)第三方模块
node.js除了官方模块,还有许多模块,需要下载并且引入,才能使用,在npm中文官网,里面可以查找和下载。
(3)自定义模块
自己写的模块,可以选择公开内容,其他模块想要使用这个模块,只需要引入即可。
常用的官方模块
## 注:引用模块的方法,var 变量名 = require('模块名') 例: var qs = require('requrystying')
1.Global 模块
介绍:全局模块,提供了一些全局变量一共五个,不需要引用,可直接使用
预定义变量:
(1)__filename: 当前文件的完整的绝对路径
可以用来拼接子文件的绝对路劲
(2)__dirname:当前文件的绝对路径(不包括本文件名)
(3)exports:一个空对象,公开和暴露自己的成员(方便其他模块引用后使用)
(4)require:一个函数,引入其他模块
(5)module:指代当前模块本身,包含了其他4个变量
2.QueryString模块
介绍:需要先引入才能用,可以用来查询字符串,提供了解析url的查询字符串部分的功能,想要获取到前端传来的某一部分:obj.键名;(面对完整的url则解析不了,后面有个更好用的)
//引入querystring
var qs = require('querystring');
var str = "name=dy&pwd=123123&vip=1";
//使用parse方法可以将str拆分用字典封装
var obj = qs.parse(str);
console.log(obj);
console.log(obj.name);
console.log(obj.pwd);
console.log(obj.vip);
当传来的是完整的url时候
var qs = require('querystring');
var str = "https://www.baidu.com/html/index.html?name=dy&pwd=123123&vip=1";
var obj = qs.parse(str);
console.log(obj);
console.log(obj.name);
console.log(obj.pwd);
console.log(obj.vip);
则会出现解析错误
3.url模块
介绍:需要引入才能使用,可以解析完整的url
//引入url模块
var url = require('url');
var str = "https://www.baidu.com/html/index.html?name=dy&pwd=123123&vip=1";
//用parse进行解析
var objUrl = url.parse(str, true); // 加true将query拆分成对象,也可不加第二个变量,就不拆分
console.log(objUrl);
console.log(objUrl.query.name);
4.Buffer模板
介绍:缓冲区,可以将数据变为一个16进制的数字
var buf = Buffer.from("hello world");
console.log(buf);
5.fs模块
介绍:需要引入, 可以对文件进行操作,而且都是异步操作,意思就是,快!
//引入fs模块
const fs = require('fs');
//异步进行覆盖写入
fs.writeFile("./html/readme.txt", "明天就是星期四,天气好。", (err) => {
console.log("写入完毕");
})
//异步进行追加写入
fs.appendFile("./html/readme.txt", "明天就是星期五,天气更好。", (err) => {
console.log("写入完毕");
})
//异步进行读取
fs.readFile(__dirname + "/html/readme.txt", (err, buf) => {
console.log(buf.toString());
})
var buf = fs.readFileSync("./html/readme.txt");
console.log("后续代码");