一、nodejs是什么?
Node.js 是一個基於 Chrome V8 引擎的 JavaScript 運行環境。
Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。
簡單的說 Node.js 就是運行在服務端的 JavaScript,利用JavaScript在服務端進行編程。
Node.js是一個讓JavaScript運行在服務器端的開發平台,它讓JavaScript的觸角伸到了服務器端,可以與PHP、JSP、Python、Ruby平起平坐。
Node.js不是一種獨立的語言,與PHP、JSP、Python、Perl、Ruby的“既是語言,也是平台”不同,Node.js使用JavaScript進行編程,運行在JavaScript引擎上(V8)。
nodejs開發的構成就成利用npm開發的社區提供的大量的第三方包加上基本的ECMAScript腳本語言以及node平台提供的一系列編程接口進行編程。
二、JavaScript語言與node
JavaScript語言本身是指ECMAScript,語言本身不包含BOM、DOM,BOM、DOM是瀏覽器環境給JavaScript提供的編程接口對象,理論上DOM、window都是屬於BOM。
瀏覽器都有引擎,最少兩個,一個是渲染引擎,一個是JavaScript解析執行引擎。
Chrome V8引擎就是專門用來解析和執行JavaScript代碼的。
在所有瀏覽器中,Google chroome的V8引擎是最快的js腳本代碼解析執行引擎。性能非常好
以前的JavaScript就是只能在瀏覽器里運行,包含ECMAScript和BOM瀏覽器的東西。
node不是一門新語言,他只是把chrome V8引擎移植到自己的環境當中,在這個環境之上構建了一系列的底層API,給ECMAScript提供了一些特定環境的編程接口。
nodejs沒有BOM、DOM。
三、nodejs的特點
1、node.js是一個平台,或者說是一個運行環境。
2、node.js是一個基於Chrome JavaScript 運行時建立的一個平台,具體是基於Chrome V8引擎,V8引擎執行Javascript的速度非常快,性能非常好。
3、node.js旨在提供一種簡單的構建 快速、可伸縮網絡程序的方法。
4、使用事件驅動,非阻塞IO模型
5、輕量、可伸縮,適用於實時數據密集的交互應用。
6、單進程,單線程
四、nodejs可以做什么?
JavaScript解析器只是JavaScript代碼運行的一種環境,瀏覽器是JavaScript運行的一種環境,瀏覽器為JavaScript提 供了操作DOM對象和window對象等的接口。Node.js也是JavaScript運行的一種環境,Node.js為JavaScript提供了操 作文件、創建HTTP服務、 創建TCP/UDP服務等的接口,所以Node.js可以完成其他后台語言(Python、PHP等)能完成的工作。
1、Web開發:Express + EJS + Mongoose/MySQL
express是輕量靈活的Nodejs Web應用框架,它可以快速地搭建網站。Express框架建立在Nodejs內置的Http模塊上,並對Http模塊再包裝,從而實際Web請求處理的功能。
ejs是一個嵌入的Javascript模板引擎,通過編譯生成HTML的代碼。
mongoose是MongoDB的對象模型工具,通過Mongoose框架,可以進行訪問MongoDB的操作。
mysql是連接MySQL數據庫的通信API,可以進行訪問MySQL的操作。
通常用Nodejs做Web開發,需要3個框架配合使用,就像Java中的SSH。
2 、Web聊天室(IM):Express + Socket.io
socket.io一個是基於Nodejs架構體系的,支持websocket的協議用於時時通信的一個軟件包。socket.io 給跨瀏覽器構建實時應用提供了完整的封裝,socket.io完全由javascript實現。
3、 Web爬蟲:Cheerio/Request
cheerio是一個為服務器特別定制的,快速、靈活、封裝jQuery核心功能工具包。Cheerio包括了 jQuery核心的子集,從jQuery庫中去除了所有DOM不一致性和瀏覽器不兼容的部分,揭示了它真正優雅的API。Cheerio工作在一個非常簡單,一致的DOM模型之上,解析、操作、渲染都變得難以置信的高效。基礎的端到端的基准測試顯示Cheerio大約比JSDOM快八倍(8x)。Cheerio封裝了@FB55兼容的htmlparser,幾乎能夠解析任何的 HTML 和 XML document。
4、 REST開發:Restify
restify是一個基於Nodejs的REST應用框架,支持服務器端和客戶端。restify比起express更專注於REST服務,去掉了express中的template, render等功能,同時強化了REST協議使用,版本化支持,HTTP的異常處理。
5、 Web博客:Hexo
Hexo是一個簡單地、輕量地、基於Node的一個靜態博客框架。通過Hexo我們可以快速創建自己的博客,僅需要幾條命令就可以完成。
發布時,Hexo可以部署在自己的Node服務器上面,也可以部署github上面。對於個人用戶來說,部署在github上好處頗多,不僅可以省去服務器的成本,還可以減少各種系統運維的麻煩事(系統管理、備份、網絡)。所以,基於github的個人站點,正在開始流行起來….
6、Web論壇: nodeclub
Node Club是用 Node.js 和 MongoDB 開發的新型社區軟件,界面優雅,功能豐富,小巧迅速, 已在Node.js 中文技術社區 CNode 得到應用,但你完全可以用它搭建自己的社區。
7、Web控制台工具: tty.js
tty.js是一個支持在瀏覽器中運行的命令行窗口,基於node.js平台,依賴socket.io庫,通過websocket與Linux系統通信。特性:支持多tab窗口模型; 支持vim,mc,irssi,vifm語法; 支持xterm鼠標事件; 支持265色顯示; 支持session。
五、nodejs的歷史
-
2008年左右,隨着 AJAX 的逐漸普及,Web 開發逐漸走向復雜化,系統化;
-
2009年2月,Ryan Dahl 想要創建一個輕量級,適應現代 Web 開發的平台;
-
2009年5月,Ryan Dahl 在 GitHub 中開源了最初版本,同年11月,JSConf 就安排了 Node 講座;
-
2010年底,Joyent 公司資助,Ryan Dahl 也加入了該公司,專門負責 Node 的開發;
-
2011年7月,在微軟的支持下登陸 Windows 平台。PS:node 的生產環境基本是在 Linux 下。
據 Node.js 創始人 Ryan Dahl 回憶,他最初希望采用 Ruby,但是 Ruby 的虛擬機效率不行。
注意:是 Node 選擇了 JavaScript,不是 JavaScript 發展出來了一個 Node。
NodeJS的作者說,他創造NodeJS的目的是為了實現高性能Web服務器,他首先看重的是事件機制和異步IO模型的優越性,而不是JS。但是他需要選擇一種編程語言實現他的想法,這種編程語言不能自帶IO功能,並且需要能良好支持事件機制。JS沒有自帶IO功能,天生就用於處理瀏覽器中的DOM事件,並且擁有一大群程序員,因此就成為了天然的選擇。
如他所願,NodeJS在服務端活躍起來,出現了大批基於NodeJS的Web服務。而另一方面,NodeJS讓前端眾如獲神器,終於可以讓自己的能力覆蓋范圍跳出瀏覽器窗口,更大批的前端工具如雨后春筍。
因此,對於前端而言,雖然不是人人都要拿NodeJS寫一個服務器程序,但簡單可至使用命令交互模式調試JS代碼片段,復雜可至編寫工具提升工作效率。
六、學習nodejs的預備知識基礎
Html
Css
JavaScript
簡單的linux命令行操作
七、安裝nodejs
windows環境下
環境 win7 --64位系統
(1)Node.js 安裝包(不推薦)
去 Node.js 的官網下載安裝包:
我們也可以在https://nodejs.org/en/download/releases/上下載歷史版本。
注意,我們以一定要用偶數版(V4、V6等),不要用奇數版(比如V5),因為奇數版不穩定。
我們並不推薦直接采用 Node.js.msi 安裝包進行安裝,不方便 node 的更新,原因如下:
-
以前版本安裝的很多全局的工具包需要重新安裝;
-
無法回滾到之前的版本;
-
無法在多個版本之間切換(很多時候我們要使用特定版本)。
因此,我們暫時先不用安裝 Node.js,稍后用 NVM 的方式來安裝 Node.js。
(2)通過 NVM 安裝Node.js(推薦)
NVM:node.js version manager,用來管理 node 的版本。之所以需要這個工具,是因為 Node.js 的各種特性都沒有穩定下來,所以我們經常由於老項目或嘗新的原因,需要切換各種版本。
第一步:下載nvm安裝包
下載地址 github上下載最新版本:https://github.com/coreybutler/nvm-windows/releases
第二步:解壓縮,新建配置文件
在c盤創建文件夾C:\nodejsnvm,在nodejsnvm\nvm下面創建兩個文件夾nvm,nodejs
解壓壓縮包到C:\nodejsnvm\nvm
打開nvm中的【install.cmd】,出現命令窗口后根據提示點擊回車,出現下述狀態
在上面的目錄中,新建一個settings.txt
文件,里面的內容填充如下:
root:C:\nodejsnvm\nvm path:C:\nodejsnvm\nodejs arch: 64 proxy: none
上方內容的解釋:
-
root 配置為:當前 nvm.exe 所在的目錄
-
path 配置為:node 快捷方式所在的目錄
-
arch 配置為:當前操作系統的位數(32/64)
-
proxy 不用配置
配置淘寶鏡像
由於nvm默認的下載地址http://nodejs.org/dist/是外國外服務器,速度非常慢,因而可以切換到淘寶的鏡像,下載速度會快很多。
打開settings.txt,加入下面文件
node_mirror: http://npm.taobao.org/mirrors/node/ npm_mirror: https://npm.taobao.org/mirrors/npm/
第三步:配置環境變量
配置環境變量(右鍵 計算機 ->屬性->高級系統設置->環境變量)
1)配置【NVM_HOME】環境變量
2)配置【NVM_SYMLINK】環境變量
3)把配置好的兩個環境變量加到Path當中
在Path中填寫 %NVM_HOME%;%NVM_SYMLINK%;
第四步:測試是否成功
打開cmd命令窗口(開始->運行->輸入cmd 或 win鍵+r鍵->輸入cmd)
在命令窗口中輸入 nvm version
出現版本號后則為配置成功
第五步:用nvm安裝nodejs
使用nvm安裝node.js
在命令窗口輸入 nvm install latest latest為最新版本
默認將下載的node.js存放到nvmde后的文件路徑下,如
第六步使用Node.js
在命令行中輸入nvm use 10.16.3
表示使用版本為10.16.3的Node.js
linux環境下
環境:centos7.7 64位
通過 NVM 安裝Node.js(推薦)
第一步安裝nvm
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
修改為淘寶源
在~/.bashrc里添加
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
修改文件
[nick@naive ~]$ vi ~/.bashrc # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then # export SYSTEMD_PAGER= # User specific aliases and functions export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This lo ads nvm bash_completion export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
重新加載設置文件
source ~/.bashrc
第二步查看nvm是否安裝成功
nvm --version 可查看版本
第三步安裝nodejs
通過 nvm install <version>(版本號) 安裝指定版本
nvm install 6.9.0
安裝一個6.9.0版本的node
第四步測試node安裝是否成功
[nick@naive ~]$ node -v v12.16.1
NVM 的常用命令
安裝指定版本的node:
nvm install 版本號 [arch]
比如:nvm install 4.2.2
卸載指定版本node:
nvm uninstall 版本號
切換使用指定版本的node,進行版本切換:
nvm use 版本號 [arch]
查看當前使用的 nvm 版本:
nvm -v
查看本地安裝的所有的 node 版本:
nvm list 或者nvm ls
在 查看 node 的版本:
node -v
列出遠程的node版本(linux下)
nvm ls-remote