Node.js學習——開篇

間陽幕賓發表於2019-02-16

前言:自從下決心轉學前端以來,我的專業課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

相關文章