NodeJS概述
...大约 6 分钟
NodeJS概述
NodeJS与JavaScript的区别
- JavaScript是前端语言,NodeJS是后端语言
NodeJS基础
NodeJS语法是完全基于JavaScript的,下列内容与JS是完全一样的: 数据类型 、运算符、逻辑结构、函数作用域和闭包、对象和原型、对象分类、......
数据类型包括
- 原始类型:string、number、boolean、null、undefined
- 引用类型:ES核心对象:global、string、number、boolean、date、math、array、error、function、object、regexp
- Node.js对象:buffer、readstream、clientrequest....
- 自定义对象
NodeJS运行
- 交互模式(REPL)运行
- 终端执行交互模式
- 读取用户输入,执行运算,输出执行结果,继续下一次循环
- 交互模式下,NodeJS自带的模块无需引入
- 脚本模式
- NodeJS下,文件格式的不同不会影响运行,只要代码文件内部的代码符合NodeJS语法
- 将所有语句编写在独立的脚本文件中,一次性执行
- 脚本模式下,除了全局对象及其相关成员外,所有其它模块中声明的对象和方法必须使用require()引入
global全局对象
Node.js下全局是global
- 在终端交互模式下,声明的变量和创建的函数都是global下的,可以通过global.a、global.fn()访问
- 在脚本模式下,声明的变量和创建的函数都不是global下的,不能通过global.a、global.fn()访问
JS下全局是window
- 在JS下,声明的变量和创建的函数都是全局window下的,可以通过window.a、window.fn()访问
console控制台对象
- console.log() --打印日志
- console.info() --打印消息
- console.warn() --打印警告
- console.error() --打印错误
- console.time() --开始计时
- console.timeEnd() --结束计时
- 更多API在node.js官方文档,笔记为常用API
需要计时的代码放入开始计时和结束计时的中间 开始计时和结束计时的字符串要一致,否则报错无法计时
console.time("for") //开始计时
for (var i = 0;i<=10000;i++){ //需要计时的代码
}
console.timeEnd("for") //结束计时
process进程对象
- process.arch --查看当前CPU架构
- process.platform --查看当前的操作系统
- process.version --查看当前Node.js版本号
- process.env --查看本机计算机的所有环境变量
- process.kill(进程PID编号) --结束指定PID编号的进程
- process.pid --查看当前进程PID编号
- 更多API在node.js官方文档,笔记为常用API
Buffer对象
- 也叫缓冲区:指在内存中临时存储数据的区域,常用于网络传输时的资源
- 存储的是每个字符对应的十六进制Unicode码,此处num代指存储的数量,如果存储的数据无法达到存储的数量,会自动重复存储已存储的字符
- 创建Buffer:buffer.alloc(num,"存储的字符")
let buf =Buffer.alloc(6,"abcdef") //存储6位缓冲数据
console.log(buf); //输出
- 将Buffer转为字符串 使用toSting()和String()方法都可以转换为字符串
- 更多API在node.js官方文档,笔记为常用API
全局函数(定时器)
一次性定时器
- 只执行一次的定时器
- setTimeout(执行的匿名函数体,间隔时间)
- 使用clearTimeout(结束定时的变量名)
//创建的一次性定时器
let timer = setTimeout( function (){
console.log("提示文字") //执行的代码
},3000) //间隔3000ms后执行代码
//结束定时器
clearTimeout(timer)
周期定时器
- 每间隔指定时长执行一次代码,实际使用中加天检判断,否则成为死循环,一直执行
- 语法:setInterval(执行的匿名函数体,每次间隔时间)
- 使用clearInterval(结束定时的变量名)
//创建的周期定时器
let timer = setInterval( function (){
console.log("提示文字") //重复执行的代码
},3000) //每间隔3000ms后重复执行代码
//结束定时器
clearInterval(timer)
立即执行计时器
- 立即执行计时器中没有间隔时间设置,属于在事件队列中执行代码
- 在JS中,代码执行顺序为:主程序>>程序外>>事件队列
- 语法:setImmediate(回调函数)
//主程序,先执行
console.log(1);
//事件队列,最后执行
setImmediate(()=>{
console.log(2);
})
//主程序,先执行
console.log(3);
- 另一种立即执行计时器:process.nextTick(回调函数)
- 这种定时器执行时不属于主程序和事件队列,而是执行时放在程序外执行
- 执行顺序是:主程序>>程序外>>事件队列
//主程序,先执行
console.log(1);
//事件队列,最后执行
setImmediate(()=>{
console.log(2);
})
//程序外,次执行
process.nextTick(()=>{
console.log(4);
})
//主程序,先执行
console.log(3);
模块系统
- 是一个独立的功能体,主要分为三类
- 自定义模块、核心模块、第三方模块
- 可以理解为一个文件就是一个模块,模块中的代码被构造函数所包含
- 构造函数的参数有:exports、require、module、__filename、__dirname
(function(exports, require, module, __filename, __dirname){
代码
})
模块系统构造函数参数说明
1. require()
用于引入另一个模块,字符串形式,同一级必须添加./ 如果需要调用引入模块内的代码,需要定义一个常量接收require()方法 调用其它模块中函数、变量方法:如下调用方法处
2. module.exports(别名exports,等价于前者)
当前模块导出(暴漏)的对象,可以往对象添加导出(暴漏)的内容,以便被其它模块引入时可以调用此模块内的代码 exports是module.exports的别名,俩者是等价关系,保险起见,最好都使用module.exports来导出(暴漏)对象
//主模块中
count b = require("./var2.js"); //定义常量接收require方法,并引入其它模块
//调用方法
console.log(b.a); //调用被引入的其它模块中的变量
//其他模块中
var a =1; //声明的变量
module.exports.a=a; //导出(暴漏)对象,方便主模块中调用
3. module
当前的模块对象,更多详情后期补充
4. __filename
当前模块的绝对路径和模块名称,更多详情后期补充
5. __dirname
当前模块的绝对路径,更多详情后期补充
模块分类
主要分为自定义模块、核心模块、第三方模块 node_modules通常不需要自己创建,使用npm或yarn包管理器时会自动创建 引入方式、场景按下图分类
包管理器
- >>请手动跳转至【1-8软件包管理器/构建工具】> 笔记:软件包管理器 - npm<<
- mysql包就是通过代码将mysql数据库操作封装起来,JS代码中想操作数据库就借助于mysql包中提供的功能
查询字符串模块
- 浏览器向web服务器发送请求,传递数据的一种方式,位于URL中问号后面的部分
- 示例:http://www.codeboy.com/list.html?kw=dell&proce=4999