一、Node.js概述
1. 对比JS
JS运行在客户端,存在多种解释器,有代码兼容性问题;Node.js运行在服务器端,只有一种解释器,没有代码兼容性问题。两者有相同自定义对象和内置(ES)对象,不同的宿主对象。
JS用于开发浏览器端的交互效果;Node.js 用于服务器端的开发,例如:数据库访问,其他服务器的调用。其实就是,JS负责前端,Node.js负责后台。
2. 下载安装
安装node只需在官网直接下载安装即可。
官网:Node.js
中文版:Node.js 中文网
3. 运行 Node.js
运行方式有两种,打开命令提示行,脚本模式:node 文件;交互模式:node 回车(进入交互模式)
要知道 node 属于单线程的运行逻辑,支持数万个并发连接,适合做基于社交网络的大规模 web 应用,不适合做 CPU 密集型应用。
二、全局对象
1. global - 用于检测一个变量或者函数是否为全局
JS(浏览器)下的global对象名称为 window,在 Node.js 下,一个脚本文件不属于全局作用域。在JS下,一个脚本属于全局作用域,所以存在全局污染。
var a = 1; //Node.js下: console.log( global.a );//undefined 不是全局作用域 //JS下: alert( window.a );//1 a为全局作用域
2. console - 控制台对象,用于输出
console.log(1); //输出日志
console.info(2); //输出消息
console.warn(3); //输出警告
console.error(4); //输出错误
console.time( m ); //开始计时
console.timeEnd( m ); //结束计时(开始计时与结束计时所提供的参数 m 要保持一致)
浏览器输出效果如下:
3. process - 进程,用于查看Node.进程
计算机上任何的软件运行都有相应的进程;
process.arch 查看当前CPU架构
process.platform 查看当前的操作系统
process.version 查看Node.js的版本号
process.pid 查看当前Node.js的进程编号
process.kill( ) 结束指定编号的进程
4. Buffer - 缓冲区,常用于保存网络传输时的资源
缓冲区是内存中临时保存数据的区域;
Buffer.alloc( 6,'abc涵' ); //创建Buffer,分配空间并存储数据,每个汉字占3个字节
buf.toString( ) //将Buffer转为字符串
三、全局函数 - 定时器函数
一次性定时器
开启:var timer = setTimeout(回调函数,间隔时间) //间隔时间到,调用一次回调函数
清除:clearTimeout(timer);
//一次性定时器 var timer = setTimeout(function(){ console.log('boom!!!'); //执行三秒后输出“boom!!!” },3000); //清除 clearTimeout(timer);
周期性定时器
开启:let timer = setInterval(回调函数,间隔时间) //每隔一段时间,调用一次回调函数
清除:clearInterval(timer);
//周期性定时器 var timer = setInterval(function(){ console.log('滴滴'); //每两秒打印一次“滴滴” },2000); console.log(1); //清除 clearInterval(timer);
立即执行定时器
会将回调函数放入到事件队列,当主程序完成后会立即执行;nextTick早于setImmediate.
开启:let timer = setImmediate(回调函数)
清除:clearImmediate(timer)
开启:process.nextTick(回调函数)
nextTick不能清除
定时器的回调函数是在程序最后执行的。
四、模块的分类
1. 自定义模块
在Node.js下每一个文件代表一个模块,每个模块是一个独立的功能体。
举例:(模拟 主模块main.js;功能模块circle.js)
//1.在功能模块中编写功能函数 function length(r){ return 2 * Math.PI * r;//周长 } function area(r){ return Math.PI * Math.pow(r,2);//面积 } //2.在功能模块中将要导出的内容放入默认的空对象 module.exports = { a:length, //将函数lengeh导出,导出的名字为a b:area //将函数area导出,导出的名字为b }; //3.在主模块中使用require函数将功能模块引入主模块 let obj = require('./circle.js'); console.log(obj.a(7).toFixed(2)); console.log(obj.b(8).toFixed(2));
2. 第三方模块(包和NPM)
包是指目录模块,通常表示第三方模块;下载网址:npm;NPM 则是被用于管理包的工具,在Node.js安装的时候会附带安装。
切换命令行路径:
npm的使用:npm可以下载安装、卸载、升级、上传第三方模块
3. 核心模块
(1)querystring 模块
查询字符串:浏览器端向服务器端查询数据的一种方式,位于浏览器的地址栏,querystring 模块用于处理网址中查询字符串的工具模块;使用前需要先导入 querystring 模块:
const querystring = require('querystring');
//引入querystring模块 const querystring = require('querystring'); //console.log(querystring); //查询字符串 let str = 'kw=笔记本&price=4000'; //获取传递的数据 //解析为对象 let obj = querystring.parse(str); console.log(obj.kw); console.log(obj.price);
(2)URL
统一资源定位,互联网上的任何资源(html、css、图形、数据......)都有对应的URL。
eg:http://www.codeboy.com:9999/products.html?kw=戴尔
new URL( ) 将一个URL解析为对象,获取URL中的各个部分
let obj = new URL('https:/www.tmooc.cn:443/course/web.html?did=2106&cname=node.js'); let obj1 = obj.search.slice(1); let obj2 = querystring.parse(obj1); console.log(` 编号:${obj2.did} 名称:${obj2.cname} `);
(3)fs模块
文件系统模块:用于文件操作,分为文件形式和目录形式;使用前需要先导入fs模块:
const fs = require('fs');
statSync(文件路径) 查看文件的状态
mkdirSync(目录的路径) 创建目录
rmdirSync(目录的路径) 移除目录,但不能移除有文件的目录
//引入fs模块 const fs = require('fs'); //查看文件状态 let s = fs.statSync('./04'); console.log(s); //创建目录 fs.mkdirSync('./mydir'); //删除目录 fs.rmdirSync('./mydir');
4. 三种模块的引用方式