Node.js
Node.js
-
概述:
JS和Node.js区别
JS运行在浏览器端,存在多款浏览器,存在兼容性问题,Node.js运行在服务器端,只有一种解释器
不存在兼容性问题
两者都有相同的自定义对象和内置对象,不同的宿主对象
JS用于开发浏览器端交互效果,Node.js用于服务端开发 -
执行方式
- 脚本模式(不属于标准输出)
node 拖拽文件 回车 - 交互模式 (属于标准输出)
node 回车 进入交互模式,两次ctrl+c 退出交互模式
- 脚本模式(不属于标准输出)
-
需要命令行部署
-
特点:
- 简单,避免过度设计
- 单线程逻辑处理
- 非阻塞的异步I/O处理
- 事件驱动编程
- 无锁机制,不会产生死锁(死锁只有多线程有)
- 支持数万个并发连接(服务器硬件相同的情况下,如果使用PHP所支持的并发量要比Nodejs少)
- 适合大规模的web应用
Node.js对象
全局对象
- global
可以检测变量和函数是否是全局,如果是全局则可以使用global访问
浏览器下的全局global对象:window
global.变量名/函数 window.变量名/函数
基于浏览器下,为全局作用域
Nodejs下,每一个文件都做为一个独立的作用域,属于模块作用域并不是全局,里面的变量和函数都是局部的,可以防止全局污染
var a=1;
function fn() {
return 2;
}
console.log(global.a); 》》输出undefined
console.log(global.fn()); 》》报错
console.log(window.a); 》》输出1
console.log(window.fn()); 》》输出2
- console(全局)
方法 | 作用 |
---|---|
console.log(); | 打印日志 |
console.info(); | 打印消息 |
console.warn(); | 打印警告 |
console.error(); | 打印报错 |
计时器:run是自定义的名
//开始计时
console.time('run');
for(let i=1;i<=10000;i++){
}
//结束计时
console.timeEnd('run');
//打印 run:0.123ms
- process(全局)
用交互模式命令行运行
方法 | 作用 |
---|---|
process.arch | 查看当前CPU架构 |
process.platform | 查看当前操作系统版本 |
process,version | 查看Node.js版本 |
process.pid | 当前node.js的进程编号 |
process.kill() | 结束指定编号进程 |
- Buffer(全局)
缓冲区、缓冲器,内存中存储数据的区域,通常用于存储网络传输资源,一个汉字占3个字节空间
创建:
创建buffer空间,存储数据,6是字节空间,重复字符串补齐
var buf=Buffer.alloc(6,'abc');
console.log(buf);
console.log(String(buf));》》abcabc
错误对象
- 错误分类
Node.js是一个JavaScript运行时平台,其应用发生错误都是一个Error实例或Error子类的实例。
在Node.js应用中,可能发生的错误有以下4类:- 标准JavaScript错误(原生JS提供的错误类型)
<EvalError> : 当调用 eval() 失败时抛出
<SyntaxError> : 当使用非法JavaScript语法时抛出
<RangeError> : 当一个值不在指定范围内时抛出
<ReferenceError> : 当使用未定义的变量时抛出
<TypeError> : 当传递错误的类型参数抛出
<URIError> : 当一个全局的URI函数被错误使用时抛出 - 系统错误
这类错误由底层系统触发,如试图打开不存在的文件,试图通过已关闭的Soket发送数据时等 - 自定义错误
这类错误在应用代码中由用户指定触发 - 断言错误
这类错误在代码违反合法逻辑时,由Node.js的assert模块触发
- 标准JavaScript错误(原生JS提供的错误类型)
- 异常捕获
Node.js采用事件驱动、异步编程基制,这意味着try / catch捕获不到异步处理发生的错误。针对这种情况,我们可以使用以下两种方式来捕获或传递错误:- Node.js式回调函数中的异常捕获
Node.js有很多异步API,这些API通过回调函数callback进行后续处理。如果发生错误,通常会在callback函数的第一个参数中包含一个Error对象;如果未发生错误,第一参数将是null。
- Node.js式回调函数中的异常捕获
const fs = require('fs');
fs.readFile('一个不存在的文件', (err, data) => {
if (err) {
console.error('读取文件错误', err);
return;
}
// 其它处理
});
- 基于事件的错误处理
如果对象是一个EventEmitter,可以通过对象 的’error’事件捕获并处理错误:
const net = require('net');
const connection = net.connect('localhost');
// 为stream添加一个 'error' 事件处理器:
connection.on('error', (err