3.模块
模块就是一个封装好的功能体
在nodejs下,模块分为自定义模块、核心模块(官方提供)、第三方模块
3.1 自定义模块
在nodejs下,任意一个js文件都是一个模块,文件中的代码默认被一个构造函数所包含
(function(exprots,require,module,__filename,__dirname){ //程序员编写代码 }) | |
__filename | 当前模块的完整路径和文件名称 |
__dirname | 当前模块的完整路径 |
require() | 引入一个模块 ('./***.js') |
module | 指代当前的模块对象 |
module.exports | 当前模块导出的对象,包含供其它模块使用的属性和方法 |
exprots | 等价于module.exprots |
3.2 模块分类
| 以路径开头 | 不以路径开头 |
文件模块 | require('./circle.js') 常用于用于自定义的模块,如果后缀名是js,可以省略 | require('url') 用于引入官方提供的核心模块 |
目录模块 | require('./02_2') 在02_2目录下寻找index.js;找不到会到package.json中寻找main属性对应的文件,找不到会去引入index.js文件 | require('04_2')会自动到当前目录下的node_module中寻找目录模块04_2,如果找不到会到上一级目录下寻找,直到顶级目录。常用于第三方模 |
3.3 npm和包
包(package)是一个目录模块,里面包含多个文件,其中有一个文件命名为package.json,是包说明文件,含有包的信息
npm:包管理工具,安装nodejs时附带安装,用于包管理,包括下载,上次,升级等 官网:www.npmjs.com
(1)切换目录: cd 完整路径 如果进入其它盘符 e/d: 回车
进入指定目录,按住shift键,在空白区域右键单击,选择 在此处打开powershell
(2)使用npm 下载安装第三方包
npm install 包名称
(3)生成package.json
npm init -y 自动生成一个package.json文件,后期使用npm安装的包都会记录到这个文件中
npm install 自动安装package.json文件中的记录的包
3.4 全局函数
parseInt/parseFloat/encodeURI/decodeURI/isNaN/isFinite/eval
(1)一次性定时器
开启 var timer=setTimeout( 回调函数,间隔时间 ); 间隔时间到了会执行回调函数,单位是毫秒 清除 clearTimeout(timer); 清除一次性定时器 | var time3=setTimeout(function(){ console.log(' 1 哎呀,糟了,TNT 炸了'); },3000) //clearTimeout(time3); |
(2)周期性定时器
开启 var timer=setInterval(回调函数,间隔时间); 每隔一段时间,执行一次回调函数 清除 clearInterval(timer) 清除周期性定时器 | var timer=setInterval(function(){ console.log('嘟!——警告!警告!TNT 炸了!——');},1500); //clearInterval(timer) |
//练习:使用周期性定时器,每个3秒钟打印一次,打印3次以后清除定时器 |
var i=0; var timer=setInterval(function(){ console.log('TNT 第 '+i+' 次微笑'); i++; if(i==3){ clearInterval(timer); } },3000); |
(3)立即执行定时器(主要是在服务器端使用)
开启 var timer=setImmediate(回调函数); //回调函数会放入到队列中 //当主线程执行完,才会执行队列的内容 清除 clearImmediate(timer); | var timer=setImmediate(function(){ console.log('立即执行处决---->查询数据库!'); }); //clearImmediate(timer); console.log('连接数据库'); |
process.nextick(回调函数); //在主程序的末尾执行(执行在setImmediate前) | process.nextTick(function(){ console.log('操作数据'); }); |
3.4 querystring模块——查询字符串
querystring属于核心模块,nodejs官方提供的,可以直接引入,不需要创建
查询字符串:浏览器向服务器发送请求,传递数据的一种方式
parse() | 将查询字符串格式化为对象 |
stringify() | 将对象转换称查询字符串 |
//练习:获取百度查询中查询字符串中的关键字 e=utf-8&tn=baidu&wd=电脑 |
const querystring=require('querystring'); var str='e=utf-8&tn=baidu&wd=电脑'; var obj=querystring.parse(str); console.log(obj.wd); //var str2=querystring.stringify(obj); //console.log(str2); |
3.5 URL模块
parse() 将url 格式化为对象 http://www.codeboy.com:80/product/detail.html?lid=5&name=dell'
protocol | 协议 | http |
hostname | 服务器域名/IP地址 | www.codeboy.com |
port | 端口号 | 80 |
pathname | 文件在服务器上的路径 | /product/detail.html |
query | 查询字符串 | lid=5&name=dell |
format( | 将对象转成url |
|
query 属性对应的是对象
// 获取浏览器传输的数据 var url=require('url'); var querystring=require('querystring'); var str='https://tmooc.cn:3000/web/1903.html?sid=10&course=javascript'; //字符串转为对象 var obj=url.parse(str); console.log(obj); var str2=obj.query; //将查询字符串转换为对象 var obj2=querystring.parse(str2); console.log(obj2.sid,obj2.course); |