Nodejs

104 阅读4分钟

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能做什么

  1. 用于做服务器端开发 web服务器
  2. 可以基于node构建一些工具,比如npm,webpack,gulp,less,sass等 vue-cli
  3. 开发桌面应用程序(借助 node-webkit、electron 等框架实现)
  4. 下载第三方模块或是包
  5. 具有复杂逻辑的网站;
  6. 基于社交网络的大规模 Web 应用;
  7. Web Socket 服务器;
  8. TCP/UDP 套接字应用程序;
  9. 命令行工具;
  10. 交互式终端程序;
  11. 带有图形用户界面的本地应用程序;
  12. 单元测试工具;
  13. 客户端 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

fsapi参数
读取文件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)( 地址,回调函数 )