一、Node.js簡介
Node.js 是一個基于 Chrome V8 引擎的運作環境。 Node.js 使用了一個
JavaScrip
、
事件驅動
的模型。
非阻塞式 I/O
JavaScrip
是一種具有函數優先的輕量級,解釋型或即時編譯型的進階程式設計語言。JavaScript 基于原型程式設計、多範式的動态腳本語言,并且支援面向對象、指令式和聲明式(如函數式程式設計)風格。
Node
是一個類似于perl,python,ruby等的一個本地運作環境,理論上可以在它的基礎上開發任何應用,使用expressjs庫,可在node環境下開發高性能web伺服器。
事件驅動
是指在持續事務管理過程中,進行決策的一種政策,即跟随目前時間點上出現的事件,調動可用資源,執行相關任務,使不斷出現的問題得以解決,防止事務堆積。
非阻塞式 I/O
,也叫異步 I/O,顯然對應的就是阻塞式 I/O。阻塞式 I/O 是指,當一個線程在執行 I/O 操作時,這個線程會阻塞,等待 I/O 操作完成後繼續執行。故使用單線程非阻塞式I/O的node的性能優異。但存線上程崩潰的隐患。
二、安裝配置
安裝node.js和npm
sudo apt-get install nodejs
sudo apt-get install npm
npm 是 Node.js 的包管理工具,用來安裝各種 Node.js 的擴充
驗證安裝
$ node -v
v10.19.0
$ npm -v
6.14.4
測試js運作環境
$ vi hlwd.js
console.log("hello world")
$ node hlwd.js
hello world #成功
三、建立伺服器
Node.js 應用是由以下部分組成:
1.引入 required 子產品:我們可以使用 require 指令來載入 Node.js 子產品。
2.建立伺服器:伺服器可以監聽用戶端的請求,類似于 Apache 、Nginx 等 HTTP 伺服器。
3.接收請求與響應請求 伺服器很容易建立,用戶端可以使用浏覽器或終端發送 HTTP 請求,伺服器接收請求後傳回響應資料。
分析Node.js 的 HTTP 伺服器
·第一行請求(
require
)Node.js 自帶的 http 子產品,并且把它指派給 http 變量。
·
·接下來調用 http子產品提供的函數:
。這個函數會傳回 一個對象,這個對象有一個叫做
createServer
的方法,這個方法有一個數值參數,指定這個 HTTP 伺服器監聽的
listen
。
端口号
引入requred子產品
使用 require 指令來載入 http 子產品,并将執行個體化的 HTTP 指派給變量 http。
vi server.js
建立伺服器
使用 http.createServer() 方法建立伺服器,并使用 listen 方法綁定 8888 端口。 函數通過 request, response 參數來接收和響應資料。
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"的網頁
四、NPM介紹
NPM是随同NodeJS一起安裝的包管理工具,能解決NodeJS代碼部署上的很多問題,常見的使用場景有以下幾種:
允許使用者從NPM伺服器下載下傳别人編寫的第三方包到本地使用。
允許使用者從NPM伺服器下載下傳并安裝别人編寫的指令行程式到本地使用。
允許使用者将自己編寫的包或指令行程式上傳到NPM伺服器供别人使用。
常用 NPM 指令
安裝
常用的 Node.js web架構子產品 express:
本地安裝:将安裝包放在 ./node_modules 下(運作 npm 指令時所在的目錄);可以通過 require() 來引入本地安裝的包。
$ npm install express
全局安裝:将安裝包放在 /usr/local 下或者你 node 的安裝目錄;可以直接在指令行裡使用。
$ npm install express -g
更新
子產品
$ npm update express
搜尋
子產品
$ npm search express
解除安裝
express子產品
$ npm uninstall express
檢視
是否解除安裝成功
清空NPM本地緩存
$ npm cache clear可以
檢視某條指令的詳細
幫助
使用package.json
package.json 位于子產品的目錄下,用于定義包的屬性。Package.json 屬性說明:
- 包名。
name
- 包的版本号。
version
- 包的描述。
description
- 包的官網 url 。
homepage
- 包的作者姓名。
author
- 包的其他貢獻者姓名。
contributors
- 依賴包清單。如果依賴包沒有安裝,npm 會自動将依賴包安裝在 node_module 目錄下。
dependencies
- 包代碼存放的地方的類型,可以是 git 或 svn,git 可在 Github 上。
repository
main
- main 字段指定了程式的主入口檔案,require(‘moduleName’)
就會加載這個檔案。這個字段的預設值是子產品根目錄下面的 index.js。
- 關鍵字
keywords
其他指令
#建立子產品
$ npm init
#在npm資源庫中注冊使用者
$ npm adduser
#釋出子產品
$ npm publish
使用淘寶 NPM 鏡像
淘寶 NPM 鏡像是一個完整 npmjs.org 鏡像,你可以用此代替官方版本(隻讀),同步頻率目前為 10分鐘 一次以保證盡量與官方服務同步。
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
之後便可以使用淘寶定制的 cnpm (gzip 壓縮支援) 指令行工具代替預設的 npm,如:
五、Node.js REPL互動式解釋器
Node 自帶了REPL(Read Eval Print Loop:互動式解釋器),可以執行以下任務:
- 讀取使用者輸入,解析輸入的 Javascript 資料結構并存儲在記憶體中。
讀取
- 執行輸入的資料結構
執行
- 輸出結果
列印
- 循環操作以上步驟直到使用者兩次按下 ctrl-c 按鈕退出。
循環
node.js的REPL類似于python終端,是以隻做一些簡單補充:
變量聲明需要使用
var
關鍵字
使用下劃線
擷取上一個表達式的運算結果
_
$ node
> var a = 1 +4
undefined
> var sum = _
undefined
> sum
5
REPL 指令
按下兩次 - 退出 Node REPL。
ctrl + c
- 退出 Node REPL.
ctrl + d
- 檢視輸入的曆史指令
向上/向下 鍵
- 列出目前指令
tab 鍵
- 列出使用指令
.help
- 退出多行表達式
.break
- 退出多行表達式
.clear
- 儲存目前的 Node REPL 會話到指定檔案
.save filename
- 載入目前 Node REPL 會話的檔案内容。
.load filename
以上,我們已經能夠初步的使用node.js了,接下來會介紹node.js的一些特性。