模块分类
以路径开头 | 不以路径开头 | |
---|---|---|
文件模块 | require('./circle.js') 常用于引入自定义模块,后缀名如果是js可以省略 | require('querystring') 常用于引入官方提供的核心模块 |
目录模块 | require('./02_ran') 首先会到目录下查找package.json 下main 属性对应的文件,如果找不到才会自动引入index.js | require('04_2') 会到当前目录下的node_modules 目录(会现在当前目录下找node_modules 目录,找不到会继续上级目录找该目录,直到盘符的根目录)中寻找04_2目录,常用于引入第三方模块 |
练习:在03_1.js模块中引入03_2目录,目录下包含文件index.js,文件中导出一个函数,计算任意两个数字相加的和;在03_1.js下调用该函数
模块中的参数
require
是一个函数,用于引入其他模块module
当前模块的对象module.exports
是当前模块导出的对象exports
导出对象的别名,默认和module.exports
指向同一个对象,为了简化module.exports
的写法- 如果要导出对象,需要把要导出的对象赋值给
module.exports
,此时,module.exports
和exports
就不在指向同一个对象 - PS.理解关系:
module.exports
本人;exports
替身
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WUI9kQpm-1584293094423)(en-resource://database/1542:1)] __filename
当前模块的绝对路径+文件名称__dirname
当前模块的绝对路径
包和npm
- 包:指第三方模块,一个包就是一个目录模块
- npm官网,用于查看所有相关包的信息,使用说明
- npm:用于管理包的工具,包括下载安装,卸载,更新,上传等
-
选择操作目录
- 命令行选择目录
cd 绝对目录
回车 - 如果涉及到盘符的编号,需要
盘符名称:
回车 - 还可以在要进入的目录文件夹下的空白区域按住
shift
,单机鼠标右键,选择“在此处打开powershell
”
- 命令行选择目录
-
使用npm
npm -v
查看当前版本号npm install 包名称
下载安装包,自动下载到当前命令行目录下的node_modules
中,同时会产生package-lock.json
文件,用于锁定版本号,会记录依赖包的信息npm config set registry https://registry.npm.taobao.org/
设置npm的下载地址,从国内镜像下载
-
CommonJS规范
JS往服务器端发展遵循了这个规范,例如模块中的引入、导出、模块作用域等,都是这个规范的实现 -
查询字符串
- 查询字符串是浏览器向服务器传递数据的一种方式,位于URL中问号后的部分,例:
https://search.jd.com/Search?keyword=笔记本&price=4000&enc=utf-8
- 查询字符串模块用于操作字符串
parse()
将查询字符串解析为对象stringify()
讲对象格式化为查询字符串//引入查询字符串模块 const querystring = require('querystring'); let str='keyword=笔记本&price=4000'; //将查询字符串解析为对象 let obj=querystring.parse(str); //console.log(obj.keyword,obj.price); //把对象格式化为查询字符串 let str2=querystring.stringify(obj); console.log(str2);
练习:获取商城中通过查询字符传递的数据
- 查询字符串是浏览器向服务器传递数据的一种方式,位于URL中问号后的部分,例:
-
URL模块
- 用来处理和解析URL的
- http://www.codeboy.com:80/product.html?lid=5
协议 域名/ip地址 端口 文件路径 查询字符串 parse()
将URL解析为对象,可以获取其中的各个部分
例如:获取文件路径:pathname
;获取查询字符串:query
//引入URL模块 const url=require('url'); //引入querystring模块 const querystring=require('querystring'); //引入URL模块 const url=require('url'); //处理URL let str='http://www.codeboy.com:80/product.html?lid=5'; //解析URL为对象,得到各个部分 let obj=url.parse(str); console.log(obj.pathname,obj.query);
练习:获取一下URL中的数据 https://www.tmooc.cn:443/admin.html?uname=root&upwd=123
第一步:解析URL获取查询字符串
第二部:解析获取的查询字符串
-
定时器
- 一次性定时器
//开启,当间隔时间到了 ,执行一次回调函数,时间单位毫秒 let timer=setTimeout(回调函数,间隔时间) //清除 clearTimeout(timer);
- 周期性定时器
//开启 每隔一段时间,执行一次回调函数 let timer=setInterval( 回调函数,间隔时间 ); //清除 clearInterval(timer);
- 立即执行定时器
第一种:
第二种://开启 在事件队列的开头执行 let timer=setImmediate( 回调函数 ); //清除 clearImmediate(timer);
//在主程序的后边执行 没有清除方法 process.nextTick( 回调函数 );
- 一次性定时器
-
文件系统模块(fs)
查看文件状态:fs.stat( path, callback )
/fs.statSync
//引入fs模块 file system const fs=require('fs'); //查看文件状态 sync表示同步 // let s=fs.statSync('./07_timer.js'); // console.log(s); //异步操作,不会阻止后续代码执行,通过回调函数获取结果 let s2=fs.stat('./07_timer.js',function (err,stats){ //err 可能出现的错误 if(err){ throw err;//抛出错误 } //stats 获取到的状态 console.log(stats); });
-
同步和异步
同步:会阻止后续代码的执行,只有前面的执行完才能执行后面的
异步:不会阻止后续代码的执行,后边的代码可以先执行,通常是通过回调函数获取结果。