NodeJS + npm/cnpm/nrm/yarn

1. NodeJS

1.1 NodeJS为性能而生

  • 目的:实现高性能web服务器
  • 实现方案:Node创始人将V8移植到web服务器,从而满足高性能web服务器的想象
  • NodeJS:Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境

V8 引擎(JS解析引擎):chrome浏览器里面的JS解析引擎(解析js速度快)

1.2 NodeJS下载安装

  • 安装验证:cmd中输入 node -v 命令后出现node版本

1.3 服务器程序示例及运行步骤

image.png
  • 文件存储在本地磁盘(如:c:/nodeprojects/test.js)
  • 打开cmd窗口定位到项目目录:cd c:/nodeprojects
  • node命令运行程序:node test.js
  • 浏览器访问程序:192.168.1.250.3800
  • 修改程序需中断后运行:crol + c 为中断命令
  • 关闭cmd程序,则服务器就关闭了

1.4 NodeJS介绍

  • 属于后台语言
  • 不用建设在任何服务器软件之上:没有根目录
  • 路由设计(更安全):显示的是虚拟路由地址而非真实的物理地址

(1) Nodejs是后台语言

语言分类 定义 举例 特点
前台语言 运行在浏览器上的语言 html、js、css等 源码用户可见
后台语言 执行在服务器上的语言 3p(php/jsp/asp) + java/python/ruby等 源码用户不可见
image.png

(2) NodeJS不用建设在任何服务器之上—没有根目录


image.png
语言 构建所依赖的http服务器 特点 优点
php php构建在Apache服务器之上 有根目录,通过文件地址作为http地址来在浏览器中直接访问(提供静态资源访问服务)
jsp jsp构建在Nginx服务器之上
nodejs nodejs不用建设在任何服务器之上 没有根目录,直接访问ip和端口即可(监听端口下的所有路径,加不加后缀地址,访问的文件都一样) 路由设计更安全
image.png

image.png

(3) NodeJS顶层路由设计

nodejs路由设计更安全:网页上显示的网址并不是该网页文件真实的存放路径。(nodejs路由和使用的文件没有任何关系,即显示的是虚拟的路由地址,而不是真实的物理文件地址,让黑客无从下手)

  • 路由设计(路由跳转)


    举例.png

    说明.png
  • 访问图片(页面插入图片)


    image.png

    image.png
  • 访问样式文件


    image.png

1.5 NodeJS特点和适合的应用场景

  • 单线程(single thread):一个线程服务所有用户(一个服务员服务所有人)
  • 非阻塞I/O(No-bloking I/O):不等待,一空闲就转向服务他人(服务员自动找活干)
  • 事件驱动(Event-driven):


    NodeJS特点.png

(1) NodeJS是单线程

  • 单线程的好处:操作系统不再有线程创建和销毁的时间开销。
  • NodeJS适合大量IO操作(多断点),但不适合计算操作,大量计算操作会造成程序阻塞。
php相当于一个有多名服务员的餐厅.png

NodeJS相当于一个只有一名服务员的餐厅.png
  • NodeJS适合多IO操作的项目


    举例.png
  • NodeJS对程序的鲁棒程度要求极高:因为如果一个用户比如触碰来地雷(比如输入错误的东西,正则也没有拦截成功),此时node线程就停了,整个服务器就down了。


    image.png

    image.png

(2) NodeJS是非阻塞IO的


image.png

image.png
  • 阻塞模式下,一个线程只能处理一个任务,要想提高吞吐量必须通过多线程
  • 非阻塞模式下,一个线程永远在执行计算操作,这个线程的cpu核心利用率永远是100%。
  • 所以,nodejs是一种特别有哲学的解决方案:与其人多,但是好多人闲着;还不如一个人玩命,往死里干活。nodejs适合做 I/O 多的项目,速度快能够服务更多的人;不适合做计算重的业务,简单计算可以。

(3) NodeJS是事件驱动的(仅了解)


image.png

(4) NodeJS适合的应用场景及局限(无法挑战老牌语言)


NodeJS的生态丰富.png

适合的应用场景.png

局限.png

1.6 NodeJS处理GET和POST请求

GET和POST请求都是上行请求,都是把数据从浏览器带向服务器的方式:

请求 说明 特点
GET请求 通过URL的?querystring来传递参数 不安全、传递内容少;但方便分享网址
POST请求 通过上行报文的报文体传递参数 安全、传递内容多;但不方便分享网址

表单、Ajax都能发送GET和POST请求,那么如何用nodejs传递参数?具体实现请看下文详述。

1.6.1 GET请求

(1) 获取url中的参数(querystring类型)


image.png

(2) 获取url中的参数(json对象类型)

  • 直接获取json类型
  • 先获取querystring类型,再转为json类型(querystring转为json
    image.png

    (3) 将json转为querystring
    image.png
1.6.2 POST请求
image.png
表单传递的内容多就会被自动拆分为很多小包.png

返回的结果是querystring类型,可通过querystring模块的parse()方法转为json对象(方便后续进行数据库操作)。

req.on("end",function(){
  console.log(result.tostring());//字符串
  var obj = querystring.parse(result.tostring());//对象
  console.log(obj);
})

1.7 自定义模块

模块:模块就是独立的逻辑体系,可以对我们的业务进行分割。

(1) 模块引入— 使用require引入nodejs的内置模块或自定义模块

image.png

requireimport的区别:ES6标准发布后,module成为标准,标准使用是以import引入模块,以export指令导出接口。但是在我们一贯的node模块中,我们依然采用的是CommonJS规范,使用require引入模块,使用module.exports导出接口。

(2) 作用域


image.png

(3) 向外暴露

  • 方法一:使用exports向外输出单个变量或函数
    image.png
image.png
  • 方法二:module exports
    image.png

    image.png

(4) 连续require

  • nodejs支持链式引用:A文件可以引用B,B文件也可以引用C文件
  • nodejs会阻止环式引用:A文件引用B,B文件又引用A文件,nodejs会自动阻止(不会报错但两者都引用不成功)

(5) node_mudlues文件夹


image.png

image.png

node_mudlues文件夹可多个项目公用


image.png

(6) 应用举例:路由表的设计


image.png
image.png

2. 包管理工具

2.1 npm的安装与使用

(1) npm介绍:npm是Nodejs下的包管理器。

介绍.png

(2) npm安装

  • 下载安装nodejs
    windows下的NodeJS安装是比较方便的,只需要登陆官网nodejs直接下载,安装过程基本直接“NEXT”就可以了。
  • 测试安装Nodejs完成
    安装完成后可以使用cmd(win+r然后输入cmd进入)测试下是否安装成功。方法:在cmd下输入node -v,出现版本提示就是完成了NodeJS的安装。
  • npm的安装
    新版的NodeJS已经集成了npm,所以npm也一并安装好了。可以在cmd命令行输入"npm -v"来测试是否成功安装,出现版本提示便OK了。
    测试安装Nodejs和npm完成.png

    备注:常规NodeJS的搭建到现在为止已经完成。npm作为一个NodeJS的模块管理,后续可根据具体情况进行各项配置。

(3) 使用npm下载安装第三方库并引用模块示例

下载安装命令:npm install ***,下载后自动存放在node_modules文件夹下

  • eg1:下载并引用静态资源模块serve-static
npm install serve-static
引用.png

运行.png
  • eg2:下载并引用 公历农历互转模块
    下载安装.png

    引用.png

    运行访问.png

eg3:下载uni-migration

npm install -g uni-migration

使用npm安装第三方库.png

备注:在HBuilderX->菜单->工具->插件安装中可直接安装各种相关插件
插件安装.png

(4) 用package.json管理依赖

  • 初始化命令来创建package.json文件:npm init
    image.png

若package.json想要采用默认配置,直接输入npm init -y 初始化命令即可

image.png

  • 创建的package.json文件示例


    image.png
  • 手动添加依赖(包名+版本号)


    image.png
  • 自动添加依赖命令(-save):npm install -save ***npm install *** -save
    备注:save可放前也可放后;使用npm时,save可略写为s;使用cnpm时,save前需两个杠。

  • cnpm替代npm

拓展:cnpm是npm淘宝镜像。npm下载太慢,淘宝做了一个npm的镜像来替代npm,速度极快,方便国人程序员;同步频率目前为 10分钟 一次以保证尽量与官方服务同步。安装命令为npm install -g cnpm --registry=https://registry.npm.taobao.org

image.png
  • 总结


    总结.png

(5) npm版本号和全局安装

  • 依赖包版本说明


    image.png
  • 全局安装


    image.png
  • 查看全局路径


    image.png

在全局路径中安装项目的开发依赖,如:cnpm install -g grunt -save-dev

image.png

当然,webpack、grunt、gulp等开发所需的模块包 也可以直接安装在项目路径下:如 cnpm install webpack -save-dev

  • npm其他命令


    image.png

2.2 yarn的安装与使用

(1) yarn的简介
Yarn是facebook发布的一款取代npm的包管理工具。
(2) yarn的特点

  • 速度超快:Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快。
  • 超级安全:在执行代码之前,Yarn 会通过算法校验每个安装包的完整性。
  • 超级可靠:使用详细、简洁的锁文件格式和明确的安装算法,Yarn 能够保证在不同系统上无差异的工作。

(3) yarn安装

  • 下载node.js后使用npm安装
npm install -g yarn
  • 查看版本
yarn --version

用Mac安装任何东西的时候只要前面开头报错为:npm WARN checkPermissions Missing write access to,即缺少对文件的写访问权限,那么只需要在命令前面加个sudo最高权限就可以了,如:sudo npm install -g yarn
(4) yarn常用命令

  • 启动项目:yarn server

你可能感兴趣的:(NodeJS + npm/cnpm/nrm/yarn)