node学习笔记

193 阅读7分钟
  1. 命令行窗口

    常用的指令:

     dir:列出当前目录下的所有文件
    
     cd :目录名 进入到指定的目录
    
     md:目录名 创建一个文件夹
    
     rd:目录名 删除一个文件夹
    
    
     - 目录
    
     . 表示当前目录
         
     ..表示上一级目录
    
     - 环境变量
    
         path
    
  • 当在命令行窗口打开一个文件,或调用一个程序时,系统会首先在当前目录下寻找文件程序,如果找到了则直接打开,如果没有找到则会依次到环境变量path的路径中寻找,直到找到为止。如果没找到则报错。
  1. 进程
  • 进程负责为程序的运行提供必备的环境
  1. 线程
  • 线程是计算机中最小的计算单位,线程负责执行进程中的程序。

  • js是单线程

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

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

    • 传统的服务器都是多线程的

    • 每进来一个请求,就创建一个线程去处理请求

    • Node的服务器单线程的

    • node处理请求时是单线程,但是在后台拥有一个I/O线程池

    • node执行js文件

    • cmd中输入js文件路径,然后node xxx.js即可运行

  2. 模块化

  • Node中,一个js文件就是一个模块

  • Node中,每一个js文件中的js代码都是独立运行在一个函数中。

  • 而不是全局作用域,所以一个模块的中的变量和函数在其他模块中无法访问。

  • node中,通过require()函数引入外部的模块

    • require()可以传递一个文件的路径作为参数,node将会自动根据该路径来引入外部模块

    • 这里的路径,如果使用相对路径,必须以.或..开头

    • 使用require()引入模块以后,该函数会返回一个对象,这个对象代表的是引入的模块。

  • 向外部暴露属性或方法

    • 可以通过exports来向外部暴露变量和方法

    • 只需要将需要暴露给外部的变量或方法设置为exports的属性即可。

  • 使用require()引入外部模块时,使用的是模块标识,可以通过模块标识来找到指定的模块

  • 模块分成两大类

    核心模块

    • node引擎提供的模块

    • 核心模块的标识就是模块的名字

    文件模块

    • 由用户自己创建的模块

    • 文件模块的标识就是文件的路径(绝对路径,相对路径)

    相对路径使用.或..开头

  • node中有一个全局对象global,它的作用和网页中window类似,

    • 在全局中创建的变量都会作为global的属性保存

    • 在全局中创建的函数都会作为global的方法保存

    • node在执行模块中的代码时,它会首先在代码的最顶部,添加如下代码

function(exports,require,module,__filename,__dirname){

}

  • 实际上模块中的代码都是包装在一个函数中执行的,并且在函数执行时,同时传递了5个实参。

    • exports,该对象用来将变量或函数暴露到外部

    • require,函数,用来引入外部的模块

    • module,代表的是当前模块本身

    • exports就是module的属性

    • 既可以使用exports导出,也可以使用module.exports导出

    • __filename,当前模块的完整路径

    • __dirname当前模块所在文件夹的完整路径

    • arguments.callee保存的是当前执行的函数对象

  • exportsmodule.exports

    • 通过exports只能使用.的方式来向外暴露内部变量

      exports.xxx=xxx

    • module.exports既可以通过.的形式,也可以直接赋值

module.exports.xxx=xxx

module.exports={

}

  • CommonJS的包规范允许我们将一组相关的模块组合到一起,形成一组完整的工具。

  • CommonJS的包规范由包结构和包描述文件两部分组成。

  • 包结构

    • 用于组织包中的各种文件
  • 包描述文件

    • 描述包的相关信息,以供外部读取分析。它是一个JSON格式的文件-package.json位于包的根目录下,是包的重要组成部分。
  • json文件中不能写注释

  • npm帮助其完成了第三方模块的发布,安装和依赖等,借助npmnode与第三方模块之间形成了很好的一个生态系统。

  • npm命令

    • npm -v 查看版本

    • npm 帮助说明

    • npm search 包名

  • 搜索模块包

    • npm install /i包名
  • 在当前目录安装包

    • npm install 包名 -g
  • 全局模式安装包(全局安装的包一般都是一些工具)

    • npm install 包名 --save 安装包并添加到依赖中

    • npm install 下载当前项目所依赖的包

  • npm init

    • 初始化
  • npm remove 包名

    • 删除一个模块
  • npm install 文件路径

    • 从本地安装
  • npm install 包名 -registry=地址

    • 从镜像源安装
  • npm config set registry 地址

    • 设置镜像源
  • 通过npm下载的包都放到node_modules文件夹中,我们通过npm下载的包直接通过包名引入即可

  • node在使用模块名字来引入模块时,它会首先在当前目录的node_modules中寻找是否含有该模块,如果有则直接使用,如果没有则去上一级目录的node_modules中寻找。直到找到磁盘根目录,如果还没有,则报错。

  • Buffer(缓冲区)

    • Buffer的结构和数组很像,操作的方法也和数组类似。

    • 数组中不能存储二进制的文件,而buffer就是专门来存储二进制数据。

    • 使用buffer不需要引入模块,直接使用即可。

    • buffer中存储的都是二进制数据,但是在显示时都是以16进制的形式显示的。

    • buffer中每一个元素的范围是从00-ff 0-255 0000000-11111111

    • 计算机中一个0或一个1 称为1位(bit)

    • 8bit = 1 byte(字节)

    • buffer中的一个元素,占用内存中的一个字节

    • buffer.length表示占用内存的大小

    • buffer构造函数都是不推荐使用的

    • buffer的大小一旦确定,

    • 创建一个10个字节的buffer

      var buf = Buffer.alloc(10)

    • 通过索引,来操作buf中的元素

    • 只要数字在控制台或页面中输出一定是10进制

    • Buffer.from(str) 将一个字符串转换为buffer

    • buf.toString() 将缓冲区中的数据转换为字符串

    • Buffer.allocUnsafe(size) 创建一个指定大小的buffer,但是buffer中可能含有敏感数据

文件系统

  • 文件系统简单来说就是通过Node来操作系统中的文件

  • 使用文件系统,需要先引入fs模块,fs是核心模块,直接引入不需要下载

  • 同步和异步调用

    • fs模块中所有的操作都有两种形式可供选择同步和异步。

    • 同步文件系统会阻塞程序的执行,也就是除非操作完毕,否则不会向下执行代码。

    • 异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回。

  • 同步文件的写入

    • 手动操作的步骤:

      1. 打开文件

      fs.openSync(path,flags [, mode])

      • path 要打开文件的路径

      • flags 打开文件要做的操作的类型

      • r 只读的

      • w 可写的

      • mode 设置文件操作的权限,一般不传

        返回值:

        • 该方法会返回一个文件的描述符作为结果,我们可以通过该描述符来对文件进行各种操作。

      1. 向文件中写入内容

      fs.writeSync(fd,string [ , position [, encoding]])

      1. 保存并关闭文件

      fs.closeSync(fd)

      • fd 要关闭的文件的描述符
  • 异步文件的写入

    • 引入fs模块

    • 打开文件

    fs.open(path,flags[, mode],callback)

    • 异步调用的方法,结果都是通过回调函数的参数返回的。

    • 回调函数有两个参数:

      err:错误对象,如果没有错误则为null

      fd:文件的描述符

      fs.write(fd,string[ ,positon[ , encoding] ],callback)

    • 用来异步写入一个文件

      fs.close(fd,callback)

    • 用来关闭一个文件

  • 简单文件写入

    fs.writeFile(file,data[,options],callback)

    fs.writeFileSync(file,data[, options])

    • file 要操作的文件的路径

    • data 要写入的数据

    • options 选项,可以对写入进行一些设置

    • callback 当写入完成以后执行的函数