关于 Nodejs
# 关于Node.js
简单的说 Node.js 就是运行在服务端的 JavaScript,是一种通过JavaScript语言开发web服务端的东西。
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
node.js有非阻塞,事件驱动I/O等特性,从而让高并发(high concurrency)在的轮询(Polling)和comet构建的应用中成为可能。
当浏览器向网站发送请求,服务器接收到了请求,并开始搜寻被请求的资源,同时还会查询一下数据库,最后将响应结果传回浏览器。
在传统的web服务器(如Apache)中,每一个请求都会使服务器创建一个新的进程来处理这个请求。
在Ajax中,我们可以不需要每次都请求一个完整的新页面。取而代之的是,每次只请求需要的部分页面信息就可以了。
但如果你要搭建一个类微博的社交网站,你的好友会随时的推送新的状态。要达成这个需求,我们需要让用户一直与服务器保持一个有效连接。目前最简单的实现方法,就是让用户和服务器之间保持长轮询(long polling)。
http是无状态协议,HTTP请求不是持续的连接,每请求一次,服务器响应一次。
而长轮询是一种利用HTTP模拟持续连接的技巧。具体来说,只要页面载入了,不管你需不需要服务器给你响应信息,你都会给服务器发一个Ajax请求。ajax是用给http加参数的方式,让他模拟有状态,这样可以让浏览器始终保持等待响应的状态。
虽然以上过程依然只有非持续的Http参与,但是我们模拟出了一个看似持续的连接状态
我们再看传统的服务器(如Apache)。每当一个新用户连到你的网站上,你的服务器就得开一个连接。
每个连接都需要占一个进程,这些进程大部分时间都是闲着的。虽然这些进程闲着,但是照样占用内存。
这意味着,如果用户连接数的增长到一定规模,你服务器没准就要耗光内存直接瘫了。
这种情况的解决方法就是:非阻塞和事件驱动。
非阻塞的服务器就是一个loop循环,这个loop会持续进行。当新请求被提出,loop接收请求,并把这个请求传给其他的进程(比如传给一个搞数据库查询的进程),然后响应一个回调(callback),把结果传回用户的浏览器。完成后loop就接着跑,接其他的请求。
从而在理论上说,同一时刻的数据库查询数量,以及用户的请求数量就没有限制了。服务器只在用户那边有事件发生的时候才响应,这就是事件驱动。
FriendFeed是用基于Python的非阻塞框架Tornado 来实现此功能的。
Node.js的应用是通过javascript开发的,然后直接在Google的V8引擎上运行。使用Node.js就不用担心用户端的请求会在服务器里运行造成阻塞的代码,因为javascript本身就是事件驱动的脚本语言。
你回想一下,在给前端写javascript的时候,更多时候你都是在搞事件处理和回调函数。因此javascript本身就是给事件处理量身定制的语言。
Node.js还是处于初期阶段。如果你想开发一个基于Node.js的应用,你应该会需要写一些很底层代码。但是下一代浏览器很快就要采用WebSocket技术了,从而长轮询也会消失。
在Web开发里,Node.js这种类型的技术只会变得越来越重要。
# 安装
进入官网 https://nodejs.org/zh-cn/ (opens new window),可以安装 Stable 版本。
linux安装,安装非常直接。运行下面的命令更新软件包索引,并且安装 Node.js 和 npm:
sudo apt update
sudo apt install nodejs npm
打开终端,分别输入 node -v 和 npm -v,返回版本号,说明安装成功。
# 环境配置
# 配置npm缓存路径
配置 npm 安装的全局模块所在的路径,以及缓存 cache 的路径,防止以后将安装的模块放在 C 盘。
这里我选择将模块所在路径和缓存路径放在我 node.js 安装的文件夹中,如下图所示,创建 node_global 和 node_cache 文件夹:
创建完成,打开 cmd 窗口:
输入以下语句,注意路径是你的路径:
npm config set prefix "C:\Program Files\nodejs\node_global"
npm config set cache "C:\Program Files\nodejs\node_cache"
该步骤可以选择跳过,则路径如下:
C:\Users\zervan\AppData\Roaming\npm
C:\Users\zervan\AppData\Roaming\npm-cache
# 安装vue3.0
安装vue3.0指令如下:
npm install -g vue
安装vue3.0的过程中如遇到
npm ERR! code EPERM
npm ERR! syscall mkdir
npm ERR! path C:\Program Files\nodejs\node_modules\.staging
npm ERR! errno -4048
npm ERR! Error: EPERM: operation not permitted, mkdir 'C:\Program Files\nodejs\node_modules\.staging'
npm ERR! [OperationalError: EPERM: operation not permitted, mkdir 'C:\Program Files\nodejs\node_modules\.staging'] {
npm ERR! cause: [Error: EPERM: operation not permitted, mkdir 'C:\Program Files\nodejs\node_modules\.staging'] {
npm ERR! errno: -4048,
npm ERR! code: 'EPERM',
npm ERR! syscall: 'mkdir',
npm ERR! path: 'C:\\Program Files\\nodejs\\node_modules\\.staging'
npm ERR! },
npm ERR! errno: -4048,
npm ERR! code: 'EPERM',
npm ERR! syscall: 'mkdir',
npm ERR! path: 'C:\\Program Files\\nodejs\\node_modules\\.staging',
npm ERR! parent: '@babel/helper-compilation-targets'
npm ERR! }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It's possible that the file was already in use (by a text editor or antivirus),
npm ERR! or that you lack permissions to access it.
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.
则在用户文件夹中删掉.npmrc这个文件夹就解决了。
以上两步都可以选择性忽略,下面才是重点
# 配置环境变量
进入系统高级属性,选择环境变量:
在 系统变量下新建 NODE_PATH,填写变量名及你的路径。
变量名为:NODE_PATH
变量值为:C:\Users\zervan\AppData\Roaming\npm\node_modules
在 系统变量下编辑 PATH,填写 Nodejs 安装路径。
C:\Program Files\nodejs
%NODE_PATH%
在 用户变量 下修改 Path 路径为你的新路径,修改为 node_global (npm)的路径。
C:\Program Files\nodejs
C:\Users\zervan\AppData\Roaming\npm
# 测试
配置完后,安装个 module 测试下,我们就安装最常用的 express 模块,打开cmd窗口,输入如下命令进行模块的全局安装。
打开 cmd 窗口,输入如下命令:
npm install express -g # -g是全局安装的意思
安装完成