1 Node.js是甚么?
Node.js 是两个 Javascript 运转自然环境(runtime)。
实际上它是对 Google V8 发动机展开了PCB,V8 发动机执行 JavaScript 的速率十分快,操控性十分好;而 Node.js 对许多特殊示例展开了强化,提供更多了代替的 API,使 V8 在非应用程序自然环境下运转得更快,用于方便地构筑反应速率快、更易扩充的应用软体领域。
Node.js 选用设计模式, 非堵塞 I/O 数学模型而以求高性能和高效率,十分适合在分布式系统设备上运转数据专门化的动态应用领域。
其WinJS:Node.js
2 文化史
2009年2月,Ryan Dahl在网志上宣布准备如前所述 V8 建立两个高性能级的 Web 伺服器并提供更多两套库。2009年5月,Ryan Dahl在 GitHub 上正式发布了起初版的部分 Node.js 包,随后几个月里,有人开始选用 Node.js 合作开发应用领域。2009年11月和2010年4月,三届 JSConf 大会都安排了 Node.js 的专题讲座。2010年年底,Node.js 赢得云计算服务供应商 Joyent 捐助,创办人Ryan Dahl加入Joyent兼职负责 Node.js 的发展。2011年7月,Node.js 在谷歌的全力支持下正式发布 Windows 版3 缺点
V8 发动机本身选用了许多最新的校对技术,这选用 JavaScript 此类JavaScript撰写出来的代码运转速度赢得了很大提升,又节约了合作投资成本。
对操控性的恭维是 Node 的两个关键所在,JavaScript 是两个设计模式语言,Node 利用了这个缺点,撰写出扩充性高的伺服器。
Node 选用了两个称为“事件循环式(event loop)”的构架,使撰写扩充性高的伺服器变得既容易又安全;提升伺服器操控性的基本功有各种各样,Node 选择了一种既能提升操控性,又能降低合作开发维数的构架,这是两个十分重要的缺点。
mammalian程式设计通常很复杂且遍野是雷,而 Node 绕开了这些,但仍能提供更多较好的操控性。
Node 选用一系列“非堵塞”程序库全力支持该事件循环式的方式,其本质上就是为磁盘、资料库等等的资源提供更多USB。
向磁盘推送两个请求时,无须等待硬碟(串行并索引文件),硬碟准备好的时候非堵塞USB会通知 Node。
该数学模型以可扩充的方式简化了对慢资源的访问, 直观,易懂。尤其是对于熟悉 onmouseover、onclick 等 DOM 该事件的用户,更有一种似曾相识的感觉。
虽然让 JavaScript 运转于伺服器端不是 Node 的独特之处,但却是其一强大功能,成为事实上的平台。
在 Node 项目启动的很短时间内,社区就已经贡献了大量的扩充库(模块),其中很多是连接资料库或是其他软件的驱动,但还有很多是凭他们的实力制作出来的十分有用的软件。
最后,不得不提到的是 Node 社区:虽然 Node 项目对比其他伺服器项目还是十分年轻,但很少看到对两个项目如此狂热的社区;不管是新手,还是专家,大家都围绕着项目,选用并贡献自己的能力,致力于打造两个探索、全力支持、分享、听取建议的乐土。
Node.js 的缺点作为两个新兴的后台语言,Node.js 有很多吸引人的地方:
RESTful API单线程:Node.js 可以在不新增额外线程的情况下,依然可以对任务展开并行处理 —— Node.js 是单线程的;它通过该事件轮询(event loop)来实现并行操作,对此,我们应该要充分利用这一点 —— 尽可能的避免堵塞操作,取而代之,多选用非堵塞操作。非堵塞 I/OV8 虚拟机设计模式4 模块
Node.js 选用 Module(模块)去划分不同的功能,以简化应用领域的合作开发。
模块有点像 C++ 语言中的类库,每两个 Node.js 的类库都包含了十分丰富的各类函数,比如 http 模块就包含了和 http 功能相关的很多函数,可以帮助合作开发者很容易地对比如 http、tcp/udp 等展开操作,还可以很容易的建立 http 和 tcp/udp 的伺服器。
要在程序中选用模块是十分方便的,一般是如下步骤:
首先安装模块,比如通过 NPM 或者 yarn 此类包管理工具来找到并安装对应模块,当然这里举例的 http 模块是 Node.js 内建的,所以无须单独安装;不过如果是非内建模块,这样安装:
接着,在安装了模块之后,我们就需要在合作开发项目当中引入该模块了。这个时候,Node.js 会在我们应用领域中搜索是否存在 node_modules 的目录,并且搜索这个目录中是否存在模块;如果找不到这个目录,则会到全局模块缓存中去寻找,同时用户可以通过相对或者绝对路径,指定模块的位置,比如:
模块中包含了很多功能代码片断,在模块中的代码大部分都是私有的,意思是在模块中定义的函数方法和变量,都只能在同两个模块中被调用。
当然,可以将某些方法和变量暴露到模块外,这个时候可以选用 exports 去实现。
5 安装
5.1 Linux
(1)直接选用已校对好的包
Node 官网已经把 Linux 下载版更改为已校对好的版了,我们可以直接下载解压后选用:
解压文件的 bin 目录底下包含了 node、npm 等命令,我们可以选用 ln 命令来设置软连接:
(2)Ubuntu 源码安装 Node.js
以下部分将介绍在 Ubuntu Linux 下选用源码安装 Node.js;其他的 Linux 系统,如 Centos 等类似如下安装步骤。
在 Git
修改目录权限:
选用 ./configure 建立校对文件,并校对安装:
查看 node 版:
(3)Ubuntu apt-get命令安装
命令格式如下:
(4)CentOS 下源码安装 Node.js
下载源码,我们需要在https://nodejs.org/en/download/下载最新的 Node.js 版,这里以 v12.18.4 为例::wq 保存并退出,校对 /etc/profile 使配置生效:
验证是否安装配置成功:
输出 v12.18.4 表示配置成功。
npm 模块安装路径:
5.2 Mac OS 上安装
我们可以通过以下两种方式在 Mac OS 上来安装 node:
1、在官方下载网站下载 pkg 安装包,直接点击安装即可。2、选用 brew 命令来安装:5.3 Windows 上安装
同样有两种方式,因为相当简单就不介绍了:
Windows 安装包(.msi)Windows 二进制文件(.exe)安装6 示例程序
如果我们选用 PHP 来撰写后端的代码时,需要 Apache 或者 Nginx 的 HTTP 伺服器,并配上 mod_php5 模块和 php-cgi。
从这个角度看,整个“接收 HTTP 允诺并提供更多 Web 页面”的需求就不需要 PHP 来处理。
不过对 Node.js 来说,概念完全不一样了;选用 Node.js 时,我们不仅仅 在实现两个应用领域,同时还实现了整个 HTTP 伺服器,事实上,我们的 Web 应用领域以及对应的 Web 伺服器基本上是一样的。
在我们建立 Node.js 第两个 “Hello, World!” 应用领域前,让我们先了解下 Node.js 应用领域是由哪几部分组成的:
引入 required 模块:我们可以选用 require 指令来载入 Node.js 模块。建立伺服器:伺服器可以监听客户端的允诺,类似于 Apache 、Nginx 等 HTTP 伺服器。接收允诺与响应允诺 伺服器很容易建立,客户端可以选用应用程序或终端推送 HTTP 允诺,伺服器接收允诺后返回响应数据。6.1 引入 required 模块
我们选用 require 指令来载入 http 模块,并将实例化的 HTTP 赋值给变量 http,实例如下:
6.2 建立伺服器
接下来我们选用 http.createServer() 方法建立伺服器,并选用 listen 方法绑定 8888 端口(当然可以是别的端口), 函数通过 request, response 参数来接收和响应数据。
实例如下,在项目的根目录下建立两个叫 server.js 的文件,并写入以下代码:
以上代码我们完成了两个可以工作的 HTTP 伺服器。
6.3 运转
接下来,打开应用程序访问 http://127.0.0.1:8888/,就会看到两个写着“Hello World”的网页:
上述代码当中:
第一行允诺(require)Node.js 自带的 http 模块,并且把它赋值给 http 常量(防止意外修改)。接下来我们调用 http 模块提供更多的函数: createServer ;这个函数会返回 两个对象,这个对象有两个叫做 listen 的方法,这个方法有两个数值参数, 指定这个 HTTP 伺服器监听的端口号。当伺服器启动后,response.end 的参数就会作为网页内容显示在页面上。