1.Node.js概述
Node.js是运行在服务器端的环境
(1)对比JS
JS运行在客户端浏览器,存在多种浏览器,存在兼容性问题;Node.js运行在服务器端,只有V8引擎一种解释器,代码不存在兼容性问题。
两者都有共同的自定义对象和内置对象(ES对象),不同的宿主对象
JS用于操作浏览器的内容,实现用户交互,Node.js用于服务器端开发,例如操作数据库,调用其它服务器
(2)运行方式
脚本模式
node 拖拽文件 回车
交互模式
node 回车 进入交互模式
退出交互模式 两次ctrl+c, ctrl+d
(3)特点
属于单线程运行逻辑,不会产生死锁,支持数万个并发连接,适合做基于社交网络的大规模WEB应用
不适合做CPU密集型应用
2.全局对象
(1)global
检测变量或者函数是否为全局的
在Node.js的交互模式下,属于全局作用域
在脚本文件下,不属于全局作用域
js下global名称为window
(2)console对象
提供了一组用于调试控制台的方法
console.log(1); //输出日志
console.info(2); //输出消息
console.warn(3); //输出警告
console.error(4); //输出错误
console.time() 开始计时
console.timeEnd() 结束计时
开始计时和结束计时两者输出的值要保持一致
(3)process对象
进程:在计算机上开启的任何软件都代表进程
process.arch 查看当前CPU架构
process.platform 查看当前的操作系统
process.version 查看当前Node.js的版本号
process.pid 查看当前的进程编号
process.kill() 结束指定编号的进程
(4)Buffer对象
缓冲区,缓冲存储器
是内存中的一块临时存储数据的区域
var buf=Buffer.alloc(5, 'abcde');//创建buffer,分配空间大小为5个字节,并存储数据
buf.toString() //将buffer转为字符串
Node.js下每个汉字占三个字节
1.模块 require: 是一个函数,用于引入其他模块 module.exports: 导出的对象,默认是一个空对象要暴露的内容需要添加到对象中 __dirname: 获取当前模块的绝对路径 __filename: 获取当前模块的绝对路径+模块名称
2.模块的分类 模块分为三种:自定义模块、核心模块、第三方模块
以路径开头 不以路径开头
文件形式模块 require('./circle.js') require('querystring')
常用于引入自定义模块 用于引入官方提供核心模块
目录形式 require('./demo-01.js') require('tao') 首先会找到目录下查找package.json 文件中main 对应的文件,果 找不到自动查找01.js 首先会到当前目录下的node_modules目中寻找tao目录,用于引入第三方模块 如果找不到会一直往上一级目录的node_modules目录中寻找 3.包的npm 包:指的是第三方模块,是一个目录模块 npm:用来管理包的工具模块,属于是第三方模块,在Node.js安装时候已经附带安装 npm -v 查看npm版本 CommonJS:是一种规范,制定了Node.js的模块规范 网址: www.npmjs.com (1)切换命令行路径 在要进入的目录的空白区域,按住shift,单击鼠标右键,选择“在此处打开powershell窗口” 在cmd下 cd 粘贴路径 如果有盘符的切换,需要添加 盘符名称: (2)npm命令 npm init -y 初始化一个package.json文件,记录下载安装的包
npm install 包名称 下载安装指定的包,会将包放入到目前目录的 node_modules 目录下,如果不存在会自动创建;同时会生成 package-lock.json 的文件用于记录所有包的版本号,package.json中只是记录当前安装包的安装信息
npm install 自动下载package.json 和 package-lock.json中记录的包
4.查询字符串模块(querystring)
查询字符串:浏览器向服务器传递数据的一种方式,位于网址中 http://search.jd.com/Search?keyword=笔记本&price=4000 协议 域名或者IP 字符串查询 查询字符串模块:专门用于操作查询字符串的工具 parse() 将查询对象解析为对象
5.url 统一资源定位,互联网上的任何的资源(html.css.js,js,图像,视频,声音)都有相应的URL http://www.codeboy.com:9999/product_details.html?lid=13#one 协议 域名或者IP地址 端口 文件在服务器的路径 查询字符串 锚点
6.定时器模块(timer) (1)一次性定时器 开启 let timer=setTimerout(回调函数,间隔时间) 当间隔时间到了,会调用一次回调函数,间隔时间单位是毫秒 清除 clearTimeout(timer) (2)周期性定时器 开启 let timer=setlnterval(回调函数,间隔时间) 每隔一段时间,调用一次回调函数 清除 clearinterval(timer) (3)立即执行定时器 开启 var timer=setlmmediate(回调函数) 清除 clearlmmediate(timer) 开启 process.nextTick(回调函数) 没有清除
定时器的回调函数是在事件队列中执行,当程序执行完才会执行事件队列的回调函数