Node学习笔记

前言:

  • Node.js是一个能够在服务端运行js的开放源代码,跨平台js运行环境

  • 采用Google开发的v8引擎运行js代码,使用事件驱动,非阻塞,异步I/O模型等技术来提高性能,优化应用程序的传输量和规模

  • Node是事件驱动的。开发者可以在不使用线程的情况下开发出一个能够承载高并发的服务器。

  • 常用框架有Express.js,Socket.IO和Connect等。

  • Node仅仅对ES标准进行了实现,所以在Node中不包含DOM 和 BOM

  • Node中可以使用所有的内建对象
    String Number Boolean Math Date RegExp Function Object Array
    而BOM和DOM都不能使用

    可以使用 console 也可以使用定时器(setTimeout() setInterval())

    Node的顶级对象是global,也可以用globalThis访问顶级对象

  • Node可以在后台来编写服务器
    Node编写服务器都是单线程的服务器

    ECMAScript标准的缺陷

  • 没有模块系统

  • 标准库少

  • 没有标准接口

  • 缺乏管理系统

–》解决CommonJS规范

CommonJS对模块的定义

  • 模块引用
    var math = require('math'); //引用math模块

  • 模块定义
    exports,module.exports

    1
    2
    3
    exports.xxx = function() {};

    module.exports = {};
  • 模块标识
    即模块的名字

Node的模块实现

模块分类:

  • 内建模块
    底层由c++编写
  • 核心模块
    Node提供
  • 文件模块
    用户编写的

包package

包结构+包描述文件(package.json)
包描述文件是一个JSON格式的文件,字段:name,description,version,dependencies…

### NPM
CommonJS包规范是理论,NPM是其中的一种实践
对Node来说,NPM帮助其完成了第三方模块的发布,安装和依赖

NPM命令:

  • npm -v
  • npm
  • npm search 包名
  • npm install/i 包名
  • npm install/i 包名 -g 全局安装
  • npm remove 包名
  • npm install 文件路径 从本地安装
  • npm install 包名 -registry=地址 从镜像源安装
  • npm config set registry 地址 设置镜像源

Buffer(缓冲区)

  • 结构如:<Buffer 00 2c 4a 00 45 89>类似数组,元素为16进制的两位数

  • 一个元素就表示内存中的一个字节

  • 内存不是通过js分配的,而是在底层通过c++申请的

  • 操作:

    • 字符串转Buffer
      let str = "nihao"
      let buf = Buffer.from(str);

    • 创建指定大小的Buffer对象
      let buf = Buffer.alloc(10)
      Buffer.allocUnsafe(size) 创建一个指定大小的buffer对象,可以包含敏感数据

    • Buffer转字符串
      buf.toString([encoding],[start],[end])

    • 写入缓冲区
      buf.write(string[,offset[,length]][,encoding])

    • 替换指定索引位置的数据
      buf[index]

    • 将指定值填入到缓冲区的指定位置
      buf.fill(value[,offset[,end]][,encoding])

fs(文件系统)

先引入const fs = require("fs").全部的操作都分为同步和异步

  • 打开文件
    fs.open(path,flags[,mode],callback)
    fs.openSync(path,flags[,mode])
  • 关闭文件
    fa.close(fd,callback)

  • 写入文件

    • 简单文件写入

    • 同步文件写入

    • 异步文件写入

    • 流式文件写入

  • 读取文件

    • 简单文件读取

    • 同步文件读取

    • 异步文件读取

    • 流式文件读取