前言:自從下決心轉學前端以來,我的專業課java基本荒廢了,所以對於後臺開發的邏輯也已基本忘乾淨了。但是作為一名準前端程式猿,我認為還是有必要了解後端開發的,雖不必深入學習,但是能夠了解專案從前端到後端的整個流程,實現簡單的業務邏輯(增刪改查)應該對我們大有裨益。NodeJS應該說是前端開發人員涉及後端開發的最佳選擇,因為使用的是前端很熟悉的Javascript語言。
一、什麼是Node.js
Node.js是一個基於V8引擎的伺服器端Javascript執行環境。Javascript(簡稱JS,下同)從此有了開發後段應用程式的能力。
因為使用的是JS語言,所以一發布以來就受到了廣大前端開發人員的喜愛。很多前端開發人員開始涉足後端開發,使用Node.js重構前端工具。
Node.js通過非阻塞I/O流、事件驅動機制展現了它超強的高併發能力。此外,Node使用的是高效能的V8引擎,提供了很多不同用途的API,採用全新的編譯技術,實現了一個高效能的伺服器。
二、Node.js環境安裝
Node.js的環境安裝十分簡單,去官網 http://nodejs.org/en/ 下載穩定版本安裝包,點選下一步下一步安裝即可。
完成以後可以開啟CMD輸入node -v
檢視是否安裝成功:
C:Usersdawei>node -v
v6.11.1
出現node的版本號則表示安裝成功。
現在我們就開始學習Nodejs。Node.js中,將很多功能劃分為一個個module
(模組)。Node.js中的很多功能都是通過模組來實現的。
三、http模組
HTTP
模組用於建立伺服器,接收和響應客戶端的請求。
//1、引入http模組
var http = require(`http`);
//建立伺服器
var server = http.createServer(function (req , res) {
//傳送HTTP頭部
//HTTP狀態碼:200:OK
//設定HTTP頭部,狀態碼是200,檔案型別是html,字符集是utf-8
res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
//傳送相應資料
res.write("Hello Node.js");
//結束處理程式,返回資料
res.end();
});
server.listen(8080); //監聽埠
//在終端列印如下資訊,提示伺服器已啟動
console.log("Server running at http://127.0.0.1:8080/");
這樣我們就完整的建立了一個web伺服器,可以在瀏覽器通過http://127.0.0.1:8080
訪問該伺服器。
回撥函式中的req
物件包含了客戶端請求的資訊,可以使用req.url
屬性拿到使用者請求的URL地址,在後期我們就是要通過不同的URL來設計不同的路由。那麼識別這個URL,就用到了URL
模組。
四、URL模組
URL模組提供了幾個方法用於操作url。
- url.parse(req.url):解析url,將url地址轉為url物件
- url.format():將url物件轉為url字串,是
parse
方法的逆向操作 - url.resolve(from,to) :新增或者替換路由
1、url.parse()
假設在上面的程式碼段中引入了url模組
url.parse(req.url)
那麼將會列印如下內容
{
protocol: null,
slashes: null,
auth: null,
host: null,
port: null,
hostname: null,
hash: null,
search: null,
query: null,
pathname: `/`,
path: `/`,
href: `/` }
由於我們只是訪問了根路徑,所以內容基本為空,很多情況下我們需要訪問詳細的頁面並且傳遞引數http://127.0.0.1:8080/login.html?uaername=dawei&pass=123
{
protocol: null,
slashes: null,
auth: null,
host: null,
port: null,
hostname: null,
hash: null,
search: `?uaername=dawei&pass=123`,
query: `username=dawei&pass=123`,
pathname: `/login.html`,
path: `/login.html?uaername=dawei&pass=123`,
href: `/login.html?uaername=dawei&pass=123` }
可以看到,這個物件的query
屬性儲存了我們的引數,也叫做查詢字串。pathname
屬性中儲存了我們的訪問路徑。這兩個屬性很常用。
我們往往需要獲取引數資訊,在伺服器端做進一步處理。在JS中我們可以使用字串擷取來獲取引數,不過再這裡我們可以直接給parse
方法傳遞一個引數true
來將查詢字串轉為物件格式,從而很方便的獲取。
url.parse(req.url,true)
{
protocol: null,
slashes: null,
auth: null,
host: null,
port: null,
hostname: null,
hash: null,
search: `?username=dawei&pass=123`,
query: { username: `dawei`, pass: `123` },
pathname: `/login.html`,
path: `/login.html?username=dawei&pass=123`,
href: `/login.html?username=dawei&pass=123` }
這樣我們就可以很方便的獲取引數的值。
2、url.resolve()
a、增加路由
var a = url.resolve(`http://example.com/`, `/one`);
console.log(a); // http://example.com/one
b、替換路由
var b = url.resolve(`http://example.com/one`, `/two`);
console.log(b); // http://example.com/two