Nodejs
参考满哥:小满zs 的个人主页 - 动态 - 掘金 (juejin.cn)
概述
1.Nodejs不是一门新的编程语言,Nodejs是在服务端运行javascript的运行环境
2.javascript并不只是能运行在浏览器端,浏览器端能够运行js是因为浏览器有js解析器,因此只需要有js解析器,任何软件都可以运行js。
3.Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,Nodejs允许javascript代码运行在服务端
4.Nodejs 是构建在 V8 引擎之上的,V8 引擎是由 C/C++ 编写的,因此我们的 JavaSCript 代码需要由 C/C++ 转化后再执行。
5.Node服务器端没有BOM和DOM功能,浏览器端不能操作文件,没有内置模块。
6.NodeJs 使用异步 I/O 和事件驱动的设计理念,可以高效地处理大量并发请求,提供了非阻塞式 I/O 接口和事件循环机制,使得开发人员可以编写高性能、可扩展的应用程序,异步 I/O 最终都是由 libuv 事件循环库去实现的。
7.Nodejs 适合干一些 IO 密集型应用,不适合 CPU 密集型应用,nodejsIO 依靠 libuv 有很强的处理能力,而 CPU 因为 nodejs 单线程原因,容易造成 CPU 占用率高,如果非要做 CPU 密集型应用,可以使用 C++ 插件编写或者 nodejs 提供的 cluster。( CPU 密集型指的是图像的处理 或者音频处理需要大量数据结构 + 算法)
node.js能做什么
- 用于做服务器端开发 web服务器
- 可以基于node构建一些工具,比如npm,webpack,gulp,less,sass等 vue-cli
- 开发桌面应用程序(借助 node-webkit、electron 等框架实现)
- 下载第三方模块或是包
- 具有复杂逻辑的网站;
- 基于社交网络的大规模 Web 应用;
- Web Socket 服务器;
- TCP/UDP 套接字应用程序;
- 命令行工具;
- 交互式终端程序;
- 带有图形用户界面的本地应用程序;
- 单元测试工具;
- 客户端 JavaScript 编译器。
安装
LTS 稳定版本
Current 最新版本
nodejs官网Node.js (nodejs.org)
nodejs中文网Node.js 中文网 (nodejs.cn)
node -v 查看版本
node常用模块
除了global模块中的内容可以直接使用,其他模块都是需要加载的
node支持Promise、同步、回调函数 三种形式
关于Buffer对象:
1. Buffer对象是Nodejs用于处理二进制数据的。
2. 其实任意的数据在计算机底层都是二进制数据,因为计算机只认识二进制。
3. 所以读取任意的文件,返回的结果都是二进制数据,即Buffer对象
4. Buffer对象可以调用toString()方法转换成字符串。
异常处理
同步形式和 Promise 形式异常处理需要通过 try...catch 的形式来捕获处理;回调形式则通过判断 err 是否存在来检查是否出现错误
如果在程序执行过程中出现了未捕获的异常,那么程序就会崩溃,因此必须把错误进行捕获,保证后续代码也能被顺利运行;Node 提供了 process 模块监听 uncaughtException 事件,可以捕获到整个进程包含异步中的错误信息
同步 js 报错或者 Promise reject 的异常都将被 uncaughtException 捕获
process.on('uncaughtException', (e) => {
console.error(e.message);
});
fs模块
fs模块用于和文件进行交互
fs中所有的文件操作,都支持回调、同步、Promise三种形式
回调方式:不按顺序执行,各自执行各的,不会阻塞代码的执行
同步方式: 就是在api后加一个Sync 如readFileSync()此时就是个同步的了
promise方式: 回调形式如果层级太深,就会陷入回调地狱,Node 14 版本开始,暴露为require('fs/promises');
fs api
| fs | api | 参数 |
|---|---|---|
| 读取文件 | fs.readFile(path,[ ], callback) | ( 文件名,{配置},回调函数 ) |
| 写入文件 | fs.writeFile(file, data,[ options], callback) | ( 文件名(不存在会自动创建), 写入的文件内容(会覆盖以前的),{配置}, 回调函数 ) |
| 追加数据到文件中 | fs.appendFile(path,data) | ( 追加的文件名 (不存在自动创建),追加的文件内容(不会覆盖原先的内容),追加文件后的回调函数 ) |
| 检测文件是否存在 | fs.access(path,mode,callback) | ( 文件名,指定要执行的可访问性检查,回调函数 ) |
| 获取路径的详细信息 | fs.stat(path,{options},callback) | (路径,回调函数) |
| 赋值文件 | fs.copyFile(src,dest,mode,callback) | ( 要复制的文件名,赋值操作的目标文件名,赋值操作的修饰符,回调函数 ) |
| 删除源文件 | fs.unlink(path,callback) | ( 地址,回调函数 ) |