Node.js

Node.js

学习是为了更好地表达自己的思想,而这是机器代替不了的--尘风

初识Node.js

Node.js 概述

  • Node.js 概念
    • Node.js是运行在服务端的JavaScript
    • Node.js是一个基于Chrome JavaScript运行时建立的一个平台
    • Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎
  • Node.js 前置
    • Node.js前置知识是JavaScript
  • Node.js 版本
    • 在终端可用node -vnode --version来查看当前Node版本,不同版本可能有差异
  • Node.js 模式
    • 脚本模式(node命令+js文件,如:node 1.js)和交互模式(终端+node指令+输入语句

Node.js 使用

  • Node.js 安装
  • Node.js 配置
    • Node.js的配置是检测path系统环境变量是否有Node.js

    path检测步骤

    开始

    运行

    cmd

    path

Node.js 工具

Node.js NPM

  • Node.js NPM
    • npm是同Node.js一起安装的包管理工具,能解决Node.js代码部署的问题
    • npm场景:下载第三方包、下载安装命令行程序、将包或命令行程序上传以供别人用
  • NPM 常用命令
    • install npm -g:更新npm版本
    • npm --version或npm -v:查看npm版本
    • npm install <Module Name>:安装npm包
    • npm install -g cnpm --registry=镜像地址:设置npm镜像
  • NPM 包安装方式
    • npm的包安装分为本地安装(local)、全局安装(global),命令行的差别在于是否有-g
  • NPM 版本号解释
    • npm版本号分为X.Y.Z三位,分别代表主版本号、次版本号、补丁版本号
    • npm代码变更时版本号按以下原则更新:
      • 只修复bug:更新Z位
      • 新增功能但向下兼容:更新Y位
      • 有大变动且向下不兼容:更新X位
      • npm官网地址
  • NPM 设置推荐镜像
    • npm镜像推荐设置淘宝npm镜像,因国内直接用npm官方镜像非常慢
      • 淘宝npm镜像是一个完整npmjs.org镜像
      • 淘宝镜像地址
      • 可用淘宝定制的cnpm(gzip压缩支持) 命令行工具代替默认的npm
    • 命令:npm install -g cnpm --registry=https://registry.npmmirror.com

Node.js REPL

  • Node.js REPL
    • Node.js REPL(Read Eval Print Loop) 交互式解释器,可在其输入命令并接收系统响应
      • Node.js REPL表示一个电脑的环境
      • 先输入node命令启动Node终端,然后才能用REPL
      • REPL类似的有Windows的终端Unix/Linux shell
    • Node自带的交互式解释器可执行打印、执行、循环、读取操作,同时还可进行JS代码调试
      • 打印:输出结果
      • 执行:执行输入的数据结构
      • 循环:循环操作以上步骤直到用户两次按下Ctrl+C退出
      • 读取:读取用户输入,解析输入的Javascript数据结构并存储在内存中
    • REPL常见命令如下:
      • Ctrl+C:退出终端
      • tab:列出当前命令
      • .help:列出使用命令
      • 按两次Ctrl+C或Ctrl+D:退出REPL

深入Node.js

Node.js 应用

  • Node.js 应用组成
    • Node.js应用由require指令、创建服务器、接收请求与响应请求组成
      • require指令:用来加载和引入模块(内置模块、第三方模块、自定义模块)
      • 创建服务器:创建服务器用来监听客户端的请求,
        • 类似的HTTP服务器有:Apache、Nginx
      • 接收请求与响应请求:客户端用浏览器或终端发送请求,服务器接收请求后返回响应数据
  • Node.js 创建应用
    • Node.js创建应用指将Node.js的应用组成进行代码实现(实现应用和HTTP服务器

Node.js 回调函数

  • Node.js 回调函数简介
    • Node.js回调函数体现了异步编程
      • 异步编程依托于回调来实现,但不是用了回调后程序就是异步化
    • Node.js回调函数通过处理大量的并发请求,大大提高了Node.js的性能
    • Node.js回调函数在完成任务后就被调用,Node用了大量回调函数且所有API都支持它
    • 回调函数一般作为函数最后一个参数出现:function foo1(name,age,callback) {}
  • Node.js 阻塞和非阻塞
    • 阻塞是按顺序执行而非阻塞是不按顺序执行(回调函数callback

Node.js事件循环

  • Node.js 事件循环
    • Node.js事件循环Node.js单线程类似进入while(true),直到无事件观察者退出
      • Node.js是单进程单线程应用程序
      • Node.jsV8引擎提供的异步执行回调接口,来处理大量并发带来极高性能
    • Node.js基本上所有事件机制都是用设计模式中观察者模式实现
      • 每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数
  • Node.js 事件驱动
    • Node.js使用事件驱动模型,当web server收到请求就关闭,然后去服务下个web请求
      • 非阻塞式IO事件驱动IO的特性使得Node.js扩展性高
      • 在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数
      • 非阻塞式IO事件驱动IOWeb服务器会一直接受请求而不等待任何读写操作
    • Node.js有内置的事件,可通过引入events模块实例化EventEmitter类来绑定和监听
      • 引入events模块:var events = require('events');
      • 实例化EventEmitter类:var eventEmitter = new events.EventEmitter();
      • 绑定事件:eventEmitter.on('eventName', eventHandler);
      • 触发事件:eventEmitter.emit('eventName');

Node.js EventEmitter

  • Node.js EventEmitter类
    • EventEmitterNode.js的一个类
    • Node.js所有异步I/O操作在完成时都会发送一个事件到事件队列
    • Node.js所有产生事件的对象都是events.EventEmitter的实例化对象
    • Node.js对象会分发事件,如:net.Server新连接、fs.readStream文件被打开
  • Node.js events模块
    • events模块只提供一个events.EventEmitter对象,可通过require("events")访问
      • EventEmitter是对事件触发与事件监听器功能的封装
      • EventEmitter提供多个函数,如:on(绑定事件)、emit(触发事件)
      • EventEmitter定义了一个特殊事件error,包含了错误的语义,在遇到异常时触发
      • error触发时EventEmitter若无响应的监听器,会把它当作异常退出程序并输出错误
        • 一般要为会触发error事件的对象设置监听器,避免遇到错误后整个程序崩溃
      • EventEmitter触发的事件有:
        • error事件:实例化错误时触发
        • newListener事件:添加新监听器时触发
        • removeListener事件:监听器移除时触发

Node.js Buffer

  • Node.js Buffer
    • Buffer类用来创建一个专门存放二进制数据的缓存区,以让Node.js处理二进制数据
      • Buffer类适用于TCP流文件流等二进制的数据
      • Buffer类解决了JS只有字符串数据类型无二进制数据类型的问题
    • Buffer类是随Node内核一起发布的核心库,其为Node.js带来了一种存储原始数据的方法
      • Buffer类主要通过I/O操作移动其中的数据
      • Buffer实例存储了原始数据,Buffer类似整数数组,对应V8堆内存外的原始内存
    • Buffer实例用于表示编码字符序列,经显式字符编码可在Buffer实例JS字符串间转换
      • Node.js目前支持的字符编码有:
        • base64:Base64编码
        • ucs2:utf16le的别名
        • binary:latin1的别名
        • hex:将每个字节编码为两个十六进制字符
        • latin1:一种把Buffer编码成字节编码的字符串的方式
        • ascii:仅支持7位ASCII数据,若设置去掉高位其编码非常快
        • utf8:多字节编码的Unicode字符,许多网页和其他文档格式都用
        • utf16le:占2或4B,小字节序编码的Unicode字符,支持代理U+10000~U+10FFFF
    • 创建Buffer类API主要有:
      • Buffer.allocUnsafe(size):返回一个指定大小的Buffer实例
      • Buffer.alloc(size[, fill[, encoding]]):返回一个指定大小的Buffer实例

Node.js Stream

  • Node.js Stream
    • Stream所有对象都是EventEmitter实例
    • Stream是抽象接口且很多对象实现了它,如:request对象stdout
    • Stream四种流类型:ReadableWritableDuplexTransform
    • Stream常用的事件:dataenderrorfinish(已被写入到底层系统)
    • Stream的形式分为链式流、管道流
      • 链式流提供连接输出流到另外一个流并创建多个流操作链机制,用于管道操作
      • 管道流提供输出流到输入流机制,用于从一个流中获取数据并将其传递到另外一个流中

Node.js 模块系统

  • Node.js 模块系统的简介
    • Node.js模块系统可让Node.js文件相互调用
    • 模块是Node.js应用程序基本组成部分,且文件和模块是相互对应即Node.js文件就是模块
      • 模块可是JS代码JSON编译过的C/C++扩展
    • Node.js提供exportsrequire对象用于导入模块
      • exports是模块公开的接口,require用于从外部获取模块的接口,即所获模块的exports对象
  • Node.js 默认存在的模块
    • Node.js默认存在4类模块:原生模块、3种文件模块
      • http、fs、path:原生模块
      • mod:非原生模块的文件模块
      • ./mod或../mod:相对路径的文件模块
      • /pathtomodule/mod:绝对路径的文件模块

Node.js 函数

  • Node.js 函数
    • Node.js函数的使用与JavaScript类似即一个函数可作为另一个函数的参数
      • 匿名函数指没有起名字的函数
      • 可先定义一个函数然后传递,也可在传递参数的地方直接定义函数

Node.js 路由

  • Node.js 路由
    • Node.js路由通过提供的请求URLGET参数POST参数来执行相应的代码
    • 路由需要的数据都包含在request对象,该对象作为onRequest()回调函数第一个参数传递
      • 为解析这些数据需额外的Node.JS模块url模块、querystring模块

Node.js 全局对象

  • Node.js 全局对象
    • Node.js全局对象global对象,类似于JSWindow对象
      • global最根本的作用是作为全局变量的宿主
      • 所有全局变量(除global外)都是global 对象的属性
      • Node.js中可直接访问到global属性,而不需要在应用中包含它
      • 全局对象(Global Object),它及其所有属性都可在程序的任何地方访问
  • Node.js 全局变量
    • 全局变量被定义时同时也会成为全局对象属性,反之亦然
      • Node.js不可能在最外层定义变量,因所有代码都属于当前模块而它不是最外层上下文
    • 按照ECMAScript定义,满足以下条件的变量是全局变量:
      • 全局对象的属性
      • 在最外层定义的变量
      • 隐式定义的变量(未定义直接赋值的变量)
    • 最好不要用var定义变量以避免引入全局变量,因为它会污染命名空间,提高代码耦合风险
    • 常见的全局变量有:
      • __dirname:表示当前执行脚本所在的目录
      • __filename:表示当前正在执行的脚本的文件名,输出文件所在位置的绝对路径
      • process:表示当前Node.js进程状态的对象,提供了一个与操作系统的简单接口
  • Node.js 常用工具
    • Node.js常用工具util,它是一个Node.js核心模块,提供常用函数的集合
      • util用于弥补核心JS的功能过于精简的不足
    • util常见函数有:
      • util.inherits(constructor, superConstructor): 实现对象间原型继承
      • util.inspect(object,[showHidden],[depth],[colors]):将对象转为字符串
      • util.callbackify(original):将async异步函数转换成遵循异常优先的回调风格
      • Node.js官方参考API

Node.js 文件系统

  • Node.js 文件系统
    • Node.js文件系统fs,它提供了一组类似UNIX(POSIX)标准的文件操作API
      • Node导入文件系统模块(fs)语法:var fs = require("fs")
  • Node.js 文件系统异步和同步
    • Node.js文件系统(fs 模块)模块中的方法均有异步和同步版本
      • 读取文件内容的函数有异步的fs.readFile()和同步的fs.readFileSync()
    • 建议用异步方法,因为异步比同步方法性能更高、速度更快且无阻塞
    • 异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)

Node.js GET/POST

  • Node.js GET/POST
    • Node.js GET/POST最常出现在服务器和用户浏览器交互中,如:表单提交
    • GET请求直接被嵌入在路径中即URL是完整的请求路径,包括了?后面的部分
      • 可用url模块中的parse函数手动解析后面的内容作为GET请求的参数
    • POST请求的内容全部都在请求体中,http.ServerRequest并无一个属性内容为请求体
      • 等待请求体传输可能是一件耗时的工作
      • 恶意的POST请求会大大消耗服务器资源
      • node.js默认不解析请求体,若需要则手动来做

Node.js 高级

Node.js 工具模块

  • Node.js 常用工具模块
    • 常用模块:OS(系统)、Path(路径)、Net(网络)、DNS(域名)、Domain

Node.js Web模块

  • Web服务器
    • Web服务器指网站服务器,是驻留在因特网上某种类型计算机的程序
      • Web服务器基本功能就是提供Web信息浏览服务
    • 多数web服务器都支持服务端的脚本语言(php、python、ruby)等
      • web服务器通过脚本语言从数据库获取数据,将结果返回给客户端浏览器
  • Web主流服务器
    • 目前最主流的三个Web服务器是ApacheNginxIIS
  • Web应用架构
    • Web应用架构分为ClientServerBusinessData
      • Data:数据层,一般由数据库组成
      • Client:一般指浏览器,可通过HTTP协议向服务器请求数据
      • Server:一般指Web服务器,可接收客户端请求并向客户端发送响应数据
      • Business:业务层,通过Web服务器处理应用程序,如:数据库交互、调用外部程序等
  • Node.js Web模块
    • Node.js Web模块http模块http模块主要用于搭建HTTP服务端和客户端

Node.js Express框架

  • Node.js Express框架简介
    • Express是一个简洁而灵活的Node.js Web应用框架, 提供了丰富的HTTP工具
      • Express可快速搭建一个完整功能的网站
  • Node.js Express框架特性
    • Node.js Express框架核心特性主要有以下:
      • 可设置中间件来响应HTTP请求
      • 定义了路由表用于执行不同的HTTP请求动作
      • 可通过向模板传递参数来动态渲染HTML页面
  • Node.js Express框架安装
    • Node.js Express框架安装须将其保存到依赖列表中
      • 安装命令:cnpm install express --save(前提是已设置好淘宝镜像)
    • Node.js Express安装在当前目录的node_modules目录,它会自动创建express目录
    • Node.js Express安装后还要同时安装以下几个重要的模块:
      • multer:node.js中间件,用于处理设置表单的MIME编码的表单数据
      • body-parser:node.js中间件,用于处理JSON、Raw、Text、URL编码数据
      • cookie-parser:解析Cookie的工具,通过req.cookies可取到传来的cookie,并将其转成对象
    • Express官网
    • Express4.x API英文版
    • Express4.x API中文版

Node.js RESTful

  • REST
    • REST是设计风格而不是标准
    • REST通常基于使用HTTPURIXMLHTMLJSON
    • REST(Representational State Transfer)表述性状态传递,是一种软件架构风格
    • REST基本架构的Http方法:GET获取、PUT更新或添加、DELETE删除、POST添加
  • RESTful
    • RESTful指满足表述性状态传递的约束条件和原则的应用程序或设计
    • RESTful基于REST架构的Web Services
      • Web service可开发分布式互操作的应用程序
      • Web service可用XML标准来描述、发布、发现、协调、配置应用程序
      • Web service是一个平台独立、低耦合、自包含、基于可编程的web应用程序

Node.js 多进程

  • Node.js 多进程
    • Node.js 多进程指通过事件驱动处理并发,在多核cpu上创建多个子进程(Node是单线程)
    • Node.js 多进程的每个子进程总有三个流对象:child.stdin、child.stdout、child.stderr
      • 三个流对象可能会共享父进程的stdio 流,也可是独立的被导流的流对象
    • Node.js提供了child_process模块来创建子进程,其方法有:
      • child_process.spawn:使用指定的命令行参数创建新进程
      • child_process.exec:使用子进程执行命令,缓存子进程的输出
      • child_process.fork:spawn()的特殊形式,用在子进程中运行的模块

Node.js JXcore

  • Node.js JXcore简介
    • Node.js JXcore是支持多线程的Node发行版本,基本无需对现有代码改动就可多线程运行
  • Node.js JXcore安装
    • Node.js JXcore安装过程是先下载JXcore安装包,再解压,最后通过jx二进制文件命令操作
  • Node.js JXcore文件
    • Node.js JXcore文件打包生成后的文件有index.jxpindex.jx
      • xxx.jx:完整包信息的二进制文件,可运行在客户端上
      • xxx.jxp:中间件文件,包含了需要编译的完整项目信息
  • Node.js JXcore资源

Node.js 数据库

  • Node.js 连接MySQL
    • MySQL是关系型数据库管理系统,由瑞典MySQL AB开发,是Oracle旗下产品
    • 要在Node.js中用MySQL,须先安装MySQL,命令为:cnpm install mysql
  • Node.js 连接MongoDB
    • MongoDB是一种文档导向数据库管理系统,由C++撰写而成
    • 要在Node.js中用MongoDB,须先安装MongoDB,命令为:cnpm install mongodb
posted @   尘风风尘  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示