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等 | 源码用户不可见 |
(2) NodeJS不用建设在任何服务器之上—没有根目录
image.png
语言 | 构建所依赖的http服务器 | 特点 | 优点 |
---|---|---|---|
php | php构建在Apache服务器之上 | 有根目录,通过文件地址作为http地址来在浏览器中直接访问(提供静态资源访问服务) | — |
jsp | jsp构建在Nginx服务器之上 | — | — |
nodejs | nodejs不用建设在任何服务器之上 | 没有根目录,直接访问ip和端口即可(监听端口下的所有路径,加不加后缀地址,访问的文件都一样) | 路由设计更安全 |
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是单线程
的
php相当于一个有多名服务员的餐厅.png
- 单线程的好处:操作系统不再有线程创建和销毁的时间开销。
- NodeJS适合大量IO操作(多断点),但不适合计算操作,大量计算操作会造成程序阻塞。
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的内置模块或自定义模块
require
和import
的区别: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下的包管理器。
(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想要采用默认配置,直接输入
image.pngnpm init -y
初始化命令即可
-
创建的package.json文件示例
image.png -
手动添加依赖(包名+版本号)
image.png -
自动添加依赖命令(-save):
npm install -save ***
或npm install *** -save
备注:save可放前也可放后;使用npm时,save可略写为s;使用cnpm时,save前需两个杠。 -
cnpm替代npm
image.png拓展:cnpm是npm淘宝镜像。npm下载太慢,淘宝做了一个npm的镜像来替代npm,速度极快,方便国人程序员;同步频率目前为 10分钟 一次以保证尽量与官方服务同步。安装命令为
npm install -g cnpm --registry=https://registry.npm.taobao.org
-
总结
总结.png
(5) npm版本号和全局安装
-
依赖包版本说明
image.png -
全局安装
image.png -
查看全局路径
image.png
在全局路径中安装项目的开发依赖,如:
image.pngcnpm install -g grunt -save-dev
当然,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
网友评论