1.模块
require() 引入模块,得到导出的对象
module.exports 当前模块导出的对象
_dirname 当前模块的绝对目录
_filename 当前模块的核对目录+模块名称
2.模块分类
分为自定义模块,第三方模块,核心模块
以路径开头 | 不以路径开头 | |
文件形式 | require ('./circle.js') 用于引入自定义模块 | require('querystring') 引入官方提供的核心模块 |
目录形式 | require('./02_tao') 首先会到目录下寻找package.json文件中main属性对应得文件,如果找不到会自动找index.js | require('tao') 会到同一级的node_modules目录中寻找tao,如果找不到会一直往上一级的node_modules目录中寻找 用于引入第三方模块 |
练习:在03_1.js中引入同一级的目录模块03_2,目录下含有文件index.js,导出一个函数,传递任意两个数字返回最大值;最后在03_1.js中调用该函数
//03_1.js
let obj = require('./03_2');
console.log(obj);
console.log(obj.getMax(2,5));
//index.js 存放在03_2(文件)目录下
function getMax(a,b){
return a>b ? a : b;
}
module.exports ={
getMax:getMax
};
3.包和npm
包(package),指的是第三方模块
npm 用于管理包的工具模块,可以用于下载,上传,更新,卸载.....
CommonJS规范:Node.js就是遵循这个规范,出现的模块概念。JS之所以作为服务器端语言,就是遵循这个规范。
下载地址:www.npmjs.com
(1)切换命令行的目录
方法1:
cd 粘贴目录的路径 回车
如果有盘符的变化,需要添加 盘符名称 :回车
方法2:
在要进入的目录下的空白区域,按住shift,单击鼠标右键,选择'打开powershell窗口'
(2)使用npm
在node.js安装的时候会附带安装
npm -v 查看版本号
npm init -y 初始化一个package.json文件,是项目描述文件,可以记录下安装的包
npm install 包的名称 下载安装包,将包放入到node_modules目录中。如果这个目录不存在会自动创建,同时生成package-lock.json文件,记录所有包的版本号,在package-lock.json中会记录安装的这个包的信息。
npm install 自动去安装package.json 和 package-lock.json中记录的包
npx -p node@8 node 文件路径 下载指定版本的nodejs,然后运行文件,运行完会将下载的nodejs删除
4.querystring模块
查询字符串:浏览器向服务器发请求传递数据的一种方式,位于浏览器的地址栈(URL)以问号为分隔
https://search.jd.com/Search?keyword=电脑&enc = utf-8
查询字符串模块用于操作查询字符串的工具模块
parse() 将查询字符串解析为对象
练习:获取以下查询字符串中传递的数据
‘lid=5&num=1’
5.URL模块
URL:统一资源定位,互联网上的任何资源都有对应的URL
http://www.codeboy.com:9999/product_detail.html?lid=5
协议 域名/ip地址 端口 文件在服务器的路径 查询字符串
URL模块用于操作URL的工具模块
parse() 解析一个URL为对象,可以获取URL的各个部分
练习:获取以下URL中传递的查询字符串数据
https://www.tmooc.cn:443/web/course.html?cid=2104&cname=nodejs
打印出 班级编号:2104
课程名称:nodejs
//导入url模块
const url = require('url');
const querystring = require('querystring');
let str2 = 'https://www.tmooc.cn:443/web/course.html?cid=2104&cname=nodejs';
//将url解析为对象
let obj2 = url.parse(str2);
// console.log(obj2);
//获取查询字符串部分
let str3 = obj2.query;
//console.log(str3);
//将查询字符串解析为对象
let obj3 = querystring.parse(str3);
console.log(obj3);
console.log(`
班级编号:${obj3.cid}
课程名称:${obj3.cname}
`);
6.timer模块
定时器模块,提供一组全局函数
(1)一次性定时器
(2)周期性定时器
开启
let timer = setInterval(回调函数,间隔时间)
每隔一段时间,调用一次函数
清除
clearInterval(timer)
练习:使用周期性定时器每隔2秒打印hello,打印3次结束。
//声明变量用于记录次数
let count =0;
let timer = setInterval(()=>{
console.log('hello');
count++;
if(count===3){
clearInterval(timer)
}
},2000);
//clearInterval(count);
(3)立即执行定时器
开启
let timer = setlmmediate(回调函数)清除
clearlmmediate(timer)
开启
process.nextTick(回调函数)
setImmediate在事件队列的最前边,process.nextTick在主程序的后边,时间对列的前边
7.文件系统模块(fs)
服务器端的文件包含目录形式和文件形式
fs.statSync(目录的路径) 查看文件的状态
isDirectory() 是否为目录
isFile()是否为文件
fs.mkdirSync(目录的路径) 创建目录
fs.rmkdirSync(目录的路径) 删除目录
课后任务
(1)复习今天内容,整理思维导图
(2)练习:开启一次性定时器,3秒以后创建1~10,10个目录;15秒以后再把这10个目录删除。
const fs = require('fs');
//开启一次性定时器
setTimeout(()=>{
//创建10个目录
for(let i=1;i<=10;i++){
fs.mkdirSync('./'+i);
//fs.rmkdirSync
}
//创建成功后
//开启定时器15秒后删除
setTimeout(()=>{
删除1-10目录
for(let i=1;i<=10;i++){
fs.rmdirSync('./'+i);
}
},15000);
},3000);
(3)预习nodejs第3天 同步和异步