一、Node.js是什么?
Node.js 是运行在服务端的 JavaScript,是一个基于Chrome JavaScript 运行时建立的一个平台。简单说,Node.js是JavaScript的运行环境(是运行环境,而不是JS框架),这使得JavaScript可以成为与Java,PHP,Python等语言一样,进行后台服务端的开发。
Node.js还提供了各种丰富的JavaScript模块库,它极大简化了使用Node.js来扩展Web应用程序的研究与开发。
Node.js = 运行环境+ JavaScript库
Node.js v8.x 中文文档:https://www.nodeapp.cn/
Node.js特性:
· Node.js库的异步和事件驱动的API全部都是异步就是非阻塞。它主要是指基于Node.js的服务器不会等待API返回的数据。服务器移动到下一个API调用,Node.js发生的事件通知机制后有助于服务器获得从之前的API调用的响应。
· 非常快的内置谷歌Chrome的V8 JavaScript引擎,Node.js库代码执行是非常快的。
· 单线程但高度可扩展 - Node.js使用具有循环事件单线程模型。事件机制有助于服务器在一个非阻塞的方式响应并使得服务器高度可扩展,而不是创建线程限制来处理请求的传统服务器。Node.js使用单线程的程序,但可以提供比传统的服务器(比如Apache HTTP服务器)的请求服务数量要大得多。
· 没有缓冲 - Node.js的应用从来不使用缓冲任何数据。这些应用只是输出数据在块中。
· 许可证协议 - Node.js 在 MIT 协议 下发布
优点:
适合高并发,密集I/O的应用场景。
因为针对每个并发的请求,都会为其分配注册一个IO事件和一个回调函数。然后程序会按照顺序去进行事件的处理,并在处理完成后会调用各自的回调函数。其中事件处理是由Node.js工作线程去处理的(Node.js底层的libuv是由多线程的线程池并行IO处理),因此主线程就不需要等待(即不会阻塞新的请求),只需要把当前的IO事件分配下去就可以继续去执行其他的事件,而不会发生阻塞。
缺点:
1.不适合CPU密集型操作的使用场景。
因为Node.js只支持单线程,所以只能利用一个CPU,无法充分的利用CPU资源(现在都是多核CPU),如果遇到长时间的计算,就会导致CPU时间片无法释放,后面的IO就无法发起。
解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起;
2.只支持单核CPU,不能充分利用CPU
3.可靠性低,一旦代码哪里出问题了,整个系统就崩溃了。(单进程,单线程)
解决方案:(1)Nnigx反向代理,负载均衡,开多个进程,绑定多个端口;(2)开多个进程监听同一个端口,使用cluster模块;
4.开源组件库质量参差不齐,更新快,向下不兼容
5.Debug不方便,错误没有stack trace
概念:
下图描述了 Node.js 的一些重要组成部分
适合NodeJS的场景
1. RESTful API
这是NodeJS最理想的应用场景,可以处理数万条连接,本身没有太多的逻辑,只需要请求API,组织数据进行返回即可。它本质上只是从某个数据库中查找 一些值并将它们组成一个响应。由于响应是少量文本,入站请求也是少量的文本,因此流量不高,一台机器甚至也可以处理最繁忙的公司的API需求。
2. 统一Web应用的UI层
目前MVC的架构,在某种意义上来说,Web开发有两个UI层,一个是在浏览器里面我们最终看到的,另一个在server端,负责生成和拼接页面。
不讨论这种架构是好是坏,但是有另外一种实践,面向服务的架构,更好的做前后端的依赖分离。如果所有的关键业务逻辑都封装成REST调用,就意味着在上层 只需要考虑如何用这些REST接口构建具体的应用。那些后端程序员们根本不操心具体数据是如何从一个页面传递到另一个页面的,他们也不用管用户数据更新是 通过Ajax异步获取的还是通过刷新页面。
3. 大量Ajax请求的应用
例如个性化应用,每个用户看到的页面都不一样,缓存失效,需要在页面加载的时候发起Ajax请求,NodeJS能响应大量的并发请求。 总而言之,NodeJS适合运用在高并发、I/O密集、少量业务逻辑的场景。
NVM:NVM全称Node Version Manager,是 Node.js 版本管理器,它让我们能方便的对 Node.js 的版本进行管理。
NPM:NPM是随同Node.js一起安装的包管理工具,它具有以下功能:允许用户从NPM服务器下载别人编写的第三方包到本地使用。允许用户将自己编写的包或插件上传到NPM服务器供别人下载使用。
NRM:这个类似与NVM,用来管理NPM Registry,简单点说就是管理在执行npm install命令时,从哪个仓库地址里下载你需要的包。
二、Node.js 安装配置
Node.js 中文网下载地址 http://nodejs.cn/download/
windows系统我们一般选择mis版本,根据自己的电脑系统和位数选择
mac选择.pkg版本
具体的版本号,一定要安装偶数版本的,因为基数版为开发版本,偶数版为稳定版本
1.在Windows上安装Node.js
1)使用MSI文件,并按照提示安装node.js。下载完成后的安装包直接双击运行,连续下一步即可。默认情况下,安装程序将 Node.js 安装到 C:\Program Files\nodejs。但这里我们需要修改安装路径到:D:\Programes\node10.3。
建议选择安装到默认目录,安装到其他目录可能需要重新配置环境变量(比较麻烦)。
2)安装完成后,检测PATH环境变量是否配置了Node.js,点击开始=》运行=》输入"cmd" => 输入命令"path",输出如下结果:
PATH=C:\oraclexe\app\oracle\product\10.2.0\server\bin;C:\Windows\system32;
C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;
c:\python32\python;C:\MinGW\bin;C:\Program Files\GTK2-Runtime\lib;
C:\Program Files\MySQL\MySQL Server 5.5\bin;D:\Programes\node10.3\;
C:\Users\rg\AppData\Roaming\npm
我们可以看到环境变量中已经包含了D:\Programes\node10.3\
3)检查Node.js版本
我们可以切换到node安装目录,查看node版本,如下:
创建一个js文件名为test.js放在安装目录下,内容如下:
console.log("Hello World")
现在运行test.js看到的结果:
(注意文件的编码格式最好是utf-8,不然输出中文会乱码。)
2.Linux 上安装 Node.js
直接使用已编译好的包
Node 官网已经把 linux 下载版本更改为已编译好的版本了,我们可以直接下载解压后使用:
# wget https://nodejs.org/dist/v10.9.0/node-v10.9.0-linux-x64.tar.xz // 下载
# tar xf node-v10.9.0-linux-x64.tar.xz // 解压
# cd node-v10.9.0-linux-x64/ // 进入解压目录
# ./bin/node -v // 执行node命令 查看版本
v10.9.0
解压文件的 bin 目录底下包含了 node、npm 等命令,我们可以使用 ln 命令来设置软连接:
ln -s /usr/software/nodejs/bin/npm /usr/local/bin/
ln -s /usr/software/nodejs/bin/node /usr/local/bin/
a.Ubuntu 源码安装 Node.js
以下部分我们将介绍在 Ubuntu Linux 下使用源码安装 Node.js 。 其他的 Linux 系统,如 Centos 等类似如下安装步骤。
在 Github 上获取 Node.js 源码:
$ sudo git clone https://github.com/nodejs/node.git
Cloning into 'node'...
修改目录权限:
$ sudo chmod -R 755 node
使用 ./configure 创建编译文件,并按照:
$ cd node
$ sudo ./configure
$ sudo make
$ sudo make install
查看 node 版本:
$ node --version
v0.10.25
Ubuntu apt-get命令安装
命令格式如下:
sudo apt-get install nodejs
sudo apt-get install npm
b.CentOS 下源码安装 Node.js
1)下载源码,你需要在https://nodejs.org/en/download/下载最新的Nodejs版本,本文以v0.10.24为例:
cd /usr/local/src/
wget http://nodejs.org/dist/v0.10.24/node-v0.10.24.tar.gz
2)解压源码
tar zxvf node-v0.10.24.tar.gz
3)编译安装
cd node-v0.10.24
./configure --prefix=/usr/local/node/0.10.24
make
make install
4)配置NODE_HOME,进入profile编辑环境变量
vim /etc/profile
设置nodejs环境变量,在 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 一行的上面添加如下内容:
#set for nodejs
export NODE_HOME=/usr/local/node/0.10.24
export PATH=$NODE_HOME/bin:$PATH
5):wq保存并退出,编译/etc/profile 使配置生效
source /etc/profile
6)验证是否安装配置成功
node -v
输出 v0.10.24 表示配置成功
7)npm模块安装路径
/usr/local/node/0.10.24/lib/node_modules/
注:Nodejs 官网提供了编译好的Linux二进制包,你也可以下载下来直接应用。
c.Mac OS 上安装
你可以通过以下两种方式在 Mac OS 上来安装 node:
1、在官方下载网站下载 pkg 安装包,直接点击安装即可。
2、使用 brew 命令来安装:
brew install node
三、Node.js - 第一个应用程序:Hello World
如果我们使用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 请求,服务器接收请求后返回响应数据。
1)引入 required 模块
我们使用 require 指令来载入 http 模块,并将实例化的 HTTP 赋值给变量 http,实例如下:
var http = require("http");
2)创建服务器
接下来我们使用 http.createServer() 方法创建服务器,并使用 listen 方法绑定 8888 端口。 函数通过 request, response 参数来接收和响应数据。
实例如下,在你项目的根目录下创建一个叫 server.js 的文件,并写入以下代码:
var 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 服务器。
使用 node 命令执行以上的代码:
node server.js
Server running at http://127.0.0.1:8888/
接下来,打开浏览器访问 http://127.0.0.1:8888/,你会看到一个写着 "Hello World"的网页。
分析Node.js 的 HTTP 服务器:
第一行请求(require)Node.js 自带的 http 模块,并且把它赋值给 http 变量。
接下来我们调用 http 模块提供的函数: createServer 。这个函数会返回 一个对象,这个对象有一个叫做 listen 的方法,这个方法有一个数值参数, 指定这个 HTTP 服务器监听的端口号。
Gif 实例演示
接下来我们通过 Gif 图为大家演示实例操作:
HelloWord示例:
命令行输入node 按enter键确定 就可以看到下面面的提示 " >_ " 表示已经进入node的运行状态了,就可以输入js代码了(和以前网页中写js基本一致)
这里我们输入console.log( "helloWorld" ) 确定 即可看到打印的helloWorld
但是途中第二条横线出现的undefined是什么?这里在node中,每一行代码执行完,都会显示一下返回值,这里没有返回值,所以有个undefined
另外大家试试下面代码,定义 a=4,b=5,输出相加后的结果
如果要结束Node的运行状态,连续按两次 ctrl+c 就可以退出,执行状态如下图。
在 Cloud Studio 中运行 node.js 程序
Cloud Studio 已经为我提供了内置的 Node.js 开发环境,我们不仅可以通过切换运行环境来编写 Node.js 代码,也可以通过 访问链接 功能来实时查看代码的运行效果,下面我通过一个例子来展示:
step1:访问Cloud Studio(https://studio.dev.tencent.com/),注册/登录账户。
step2:在右侧的运行环境菜单选择:"Node.js" 运行环境
step3:在左侧代码目录中新建Node.js代码目录编写你的 Node.js 代码
step4:进入 Node.js 代码目录运行 node hello.js 我们在代码中引入了 http 模块,并且通过http.createServer()方法创建了一个 http 服务器,通过listen() 方法绑定了 8888 端口
step5:点击最右侧的【访问链接】选项卡,在访问链接面板中填写端口号为:8888,点击创建链接,即可点击生成的链接访问我们的 Node.js 项目
/*代码示例*/ var 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, Universe! I'm running on Cloud Studio!\n"); }).listen(8888); // 终端打印如下信息 console.log('Server running at http://127.0.0.1:8888/');
Tips: 从终端中输入命令可以看出 Cloud Studio 为我们集成了 Ubuntu16.04.1 + node8.10.0 的开发环境:
参考网址:
http://www.runoob.com/nodejs/nodejs-tutorial.html
https://blog.csdn.net/u010513603/article/details/78428263
转载请注明: ITTXX.CN--分享互联网 » Node.js的安装和快速入门
最后更新:2018-12-07 18:08:11