Node.js从零开始——介绍

2022-11-24 0 427

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 内建的,所以无须单独安装;不过如果是非内建模块,这样安装:

npm install <Module name>

接着,在安装了模块之后,我们就需要在合作开发项目当中引入该模块了。这个时候,Node.js 会在我们应用领域中搜索是否存在 node_modules 的目录,并且搜索这个目录中是否存在模块;如果找不到这个目录,则会到全局模块缓存中去寻找,同时用户可以通过相对或者绝对路径,指定模块的位置,比如:

const myModule = require(./myModule.js);

模块中包含了很多功能代码片断,在模块中的代码大部分都是私有的,意思是在模块中定义的函数方法和变量,都只能在同两个模块中被调用。

当然,可以将某些方法和变量暴露到模块外,这个时候可以选用 exports 去实现。

5 安装

5.1 Linux

(1)直接选用已校对好的包

Node 官网已经把 Linux 下载版更改为已校对好的版了,我们可以直接下载解压后选用:

wget https://nodejs.org/dist/v12.18.4/node-v12.18.4-linux-x64.tar.xz# 下载 tar xf node-v12.18.4-linux-x64.tar.xz # 解压 cd node-v12.18.4-linux-x64/ # 进入解压目录 ./bin/node -v # 执行node命令 查看版 v12.18.4

解压文件的 bin 目录底下包含了 node、npm 等命令,我们可以选用 ln 命令来设置软连接:

ln -s /usr/software/nodejs/bin/npm /usr/local/bin/ ln -s /usr/software/nodejs/bin/node /usr/local/bin/

(2)Ubuntu 源码安装 Node.js

以下部分将介绍在 Ubuntu Linux 下选用源码安装 Node.js;其他的 Linux 系统,如 Centos 等类似如下安装步骤。

在 Git

sudo git clone https://github.com/nodejs/node.git Cloning into node

修改目录权限:

sudo chmod -R 755 node

选用 ./configure 建立校对文件,并校对安装:

cdnode sudo ./configure sudo make sudo make install

查看 node 版:

node –version v12.18.4

(3)Ubuntu apt-get命令安装

命令格式如下:

sudo apt-get install nodejs sudo apt-get install npm

(4)CentOS 下源码安装 Node.js

下载源码,我们需要在https://nodejs.org/en/download/下载最新的 Node.js 版,这里以 v12.18.4 为例:
cd/usr/local/src/ wget http://nodejs.org/dist/v12.18.4/node-v12.18.4.tar.gz
解压源码:
tar zxvf node-v12.18.4.tar.gz
校对安装:
cdnode-v12.18.4 ./configure –prefix=/usr/local/node/12.18.4 make make install
配置 NODE_HOME,进入 profile 编辑自然环境变量:
vim /etc/profile
设置 Node 自然环境变量,在 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 一行的上面添加如下内容:
#set for nodejs export NODE_HOME=/usr/local/node/12.18.4 export PATH=$NODE_HOME/bin:$PATH

:wq 保存并退出,校对 /etc/profile 使配置生效:

source /etc/profile

验证是否安装配置成功:

node -v

输出 v12.18.4 表示配置成功。

npm 模块安装路径:

/usr/local/node/12.18.4/lib/node_modules/
注:Node.js 官网提供更多了校对好的 Linux 二进制包,也可以下载下来直接应用领域。

5.2 Mac OS 上安装

我们可以通过以下两种方式在 Mac OS 上来安装 node:

1、在官方下载网站下载 pkg 安装包,直接点击安装即可。2、选用 brew 命令来安装:
brew install node

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,实例如下:

const http = require(“http”);

6.2 建立伺服器

接下来我们选用 http.createServer() 方法建立伺服器,并选用 listen 方法绑定 8888 端口(当然可以是别的端口), 函数通过 request, response 参数来接收和响应数据。

实例如下,在项目的根目录下建立两个叫 server.js 的文件,并写入以下代码:

const http = require(http); http.createServer(function (request, response) { // 推送 HTTP 头部 // HTTP 状态值: 200 : OK // 内容类型: text/plain response.writeHead(200, {Content-Type: text/plain}); // 推送响应数据 “Hello World” response.end(Hello World\n); }).listen(8888); // 终端打印如下信息 console.log(Server running at http://127.0.0.1:8888/);

以上代码我们完成了两个可以工作的 HTTP 伺服器。

6.3 运转

Node.js从零开始——介绍

接下来,打开应用程序访问 http://127.0.0.1:8888/,就会看到两个写着“Hello World”的网页:

Node.js从零开始——介绍

上述代码当中:

第一行允诺(require)Node.js 自带的 http 模块,并且把它赋值给 http 常量(防止意外修改)。接下来我们调用 http 模块提供更多的函数: createServer ;这个函数会返回 两个对象,这个对象有两个叫做 listen 的方法,这个方法有两个数值参数, 指定这个 HTTP 伺服器监听的端口号。当伺服器启动后,response.end 的参数就会作为网页内容显示在页面上。

Node.js从零开始——介绍
上一篇: Node简介

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务