Node.js的簡介
Node.js 就是運行在服務端的 JavaScript。
Node.js 是一個基於Chrome JavaScript 運行時建立的一個平臺。
Node.js是一個事件驅動I/O服務端JavaScript環境,基於Google的V8引擎,V8引擎執行Javascript的速度非常快,性能非常好。
Node.js的特性
非阻塞I/O特性:
- 阻塞:I/O時進程休眠等待, 等待I/O完成後再進行下一步(就是排隊的時候,一個一個來按順序處理)
- 非阻塞:I/O時進程立即返回,進程不等待I/O完成, 繼續往下執行 (就是大家先來領個號,立刻返回,等處理好後把結果通知給你)
RESTful API
RESTful API是一套協議來規範多種形式的前端和同一個後臺的交互方式。RESTful API由後臺也就SERVER來提供給前端來調用。前端調用API向後臺發起HTTP請求,後臺響應請求將處理結果反饋給前端。
單線程
Node可以在不新增額外線程的情況下,依然可以對任務進行併發處理。
事件驅動
Node.js 使用事件驅動模型,當web server接收到請求,就把它關閉然後進行處理,然後去服務下一個web請求。當這個請求完成,它被放回處理隊列,當到達隊列開頭,這個結果被返回給用戶。這個模型非常高效可擴展性非常強,因爲web server一直接受請求而不等待任何讀寫操作。(這也被稱之爲非阻塞式IO或者事件驅動IO)在事件驅動模型中,會生成一個主循環來監聽事件,當檢測到事件時觸發回調函數。
Node.js 安裝配置
本章節我們將向大家介紹在 Windows 和 Linux 上安裝 Node.js 的方法。
Node.js 安裝包及源碼下載地址爲:https://nodejs.org/en/download/。
Node.js 歷史版本下載地址:https://nodejs.org/dist/
安裝
選擇要安裝的版本進行安裝
安裝完成 查看node版本 命令 node --version
步驟一:引入 required 模塊
引入 required 模塊
我們使用 require 指令來載入 http 模塊,並將實例化的 HTTP 賦值給變量 http
var http = require("http");
在 Node.js 中我們需要引入各種模塊並實例化來運用,通常都是通過 require 指令來引入
步驟二、創建服務器
創建服務器
接下來我們使用 http.createServer() 方法創建服務器,並使用 listen 方法綁定 8888 端口。 函數通過 request, response 參數來接收和響應數據。
實例如下,在你項目的根目錄下創建一個叫 test.js 的文件,並寫入以下代碼:
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8888);
console.log('Server running at http://127.0.0.1:8888/');
接收請求與響應請求
以上代碼我們完成了一個可以工作的 HTTP 服務器。進入test.js所在目錄,使用 node 命令執行以上的代碼
接下來,打開瀏覽器訪問 http://127.0.0.1:8888/,你會看到一個寫着 “Hello World”的網頁。
REPL 命令
- ctrl + c - 退出當前終端,按下兩次 ctrl + c 鍵就能退出 REPL。
- ctrl + c 按下兩次 - 退出 Node REPL。
- ctrl + d - 退出 Node REPL.
- 向上/向下 鍵 - 查看輸入的歷史命令
- tab 鍵 - 列出當前命令
- .help - 列出使用命令
- .break - 退出多行表達式
- .clear - 退出多行表達式
- .save filename - 保存當前的 Node REPL 會話到指定文件
- .load filename - 載入當前 Node REPL 會話的文件內容。
什麼是 Node.js 模塊系統?
Node.js 模塊可以分爲兩大類,一類是核心模塊,另一類是文件模塊。
核心模塊
直接通過require獲取核心模塊,例如:
var fs = require('fs')
核心模塊擁有最高的加載優先級,如果有模塊與核心模塊命名衝突,Node.js 總是會加載核心模塊。
exports 和 require
exports 和 require
Node.js 提供了 exports 和 require 兩個對象,其中 exports 是模塊公開的接口,require 用於從外部獲取一個模塊的接口,即所獲取模塊的 exports 對象,接下來我們用個實例來解釋
1.創建個hello.js文件代碼如下
exports.world = function() {
console.log('Hello World');
}
2.創建文件test.js引入模塊 hello.js
var hello = require('./hello');
hello.world();
require(‘./hello’) 引入了當前目錄下的 hello.js 文件(./ 爲當前目錄,node.js 默認後綴爲 js)
3.執行test.js文件輸出 ‘Hello World’;
在 test.js 中通過 require(‘./hello’) 加載這個模塊,然後就可以直接訪 問 hello.js 中 exports 對象的成員函數了。
有時候只是想把一個對象封裝到模塊中第一步在hello.js封裝對象
function Hello() {
var name;
this.setName = function(thyName) {
name = thyName;
};
this.sayHello = function() {
console.log('Hello ' + name);
};
};
module.exports = Hello;