01.03 Node.js零基礎處理GET、POST請求

Node.js零基礎處理GET、POST請求

Node.js零基礎處理GET、POST請求

基於nodejs的服務端開發已經有express、koa2等成熟框架。熟練使用這些框架並不難,但背後的原理是怎樣的,很多同學並沒有做到知其所以然。本分享注重原理,從細節摳起來,循序漸進,特別適合零基礎的同學。在掌握原理後,再去學習express、koa2框架,會理解得更加透徹。本次主題為如何基於nodejs實現處理GET、POST請求

按照步驟一步步來,就會很快掌握~來加油吧!

1 初始化項目

1.1 創建項目目錄

找個喜歡的地方,新建並初始化項目,執行以下命令:

Node.js零基礎處理GET、POST請求

1.2 編寫服務腳本

在項目根目錄下創建bin/www.js。

Node.js零基礎處理GET、POST請求

啟動web服務需要使用nodejs的http模塊,打開 bin/www.js 編寫代碼:

Node.js零基礎處理GET、POST請求

配置入口文件,修改package.json

Node.js零基礎處理GET、POST請求

【關於main字段】

官方說明的原文是這樣的:

The main field is a module ID that is the primary entry point to your program. That is, if your package is named foo, and a user installs it, and then does require("foo"), then your main module’s exports object will be returned.

This should be a module ID relative to the root of your package folder.

For most modules, it makes the most sense to have a main>

翻譯大致意思是:

main字段是一個模塊ID,是指向你程序的主入口。也就是說,如果你的package名叫foo,那麼一個用戶安裝了你這個package,並且執行require("foo"),你的main模塊的exports對象將會被返回。

這個模塊ID應該相對於你的package根目錄。

對於大多數的模塊來說,設置main還是非常有意義的,除此之外也沒有其他鳥用了。

【關於script字段】

官方說明的原文是這樣的:

The “scripts” property is a dictionary containing>

scripts是一個包含了腳本命令的dictionary,可以在package不同的生命週期中被執行。key是生命週期事件,value是要運行的命令。

英語比較好的同學可以參看官方原文:https://docs.npmjs.com/files/package.json

回到我們的項目來,項目的主入口文件是./bin/www.js。

現在,在項目根目錄下執行npm run dev,就等同於執行node ./bin/www.js。 執行後,在控制檯可以看到輸出,說明服務已經正常啟動:

Node.js零基礎處理GET、POST請求

瀏覽器打開http://localhost:8000,出現“hello nodejs”。

2 設置服務自動熱啟動

每次修改代碼都要重啟服務器才能生效很麻煩,使用nodemon來實現自動監測代碼變化並重啟。

另外,安裝cross-env可以方便的跨平臺設置環境變量(例如,windows用%ENV_VAR%,其他系統可能使用$ENV_VAR,不統一)

Node.js零基礎處理GET、POST請求

修改package.json:

Node.js零基礎處理GET、POST請求

再次執行npm run dev的時候,如果代碼有改動,web服務會自動重啟,這樣就方便多啦。

3 處理GET請求

瀏覽器訪問http://localhost:8000?id=1&name=demo,相當於我們發送了一個GET請求,並且傳遞了兩個變量和值。

接下來我們實現:接收GET請求,並把GET請求傳遞的數據再返回給瀏覽器。

修改bin/www.js:

Node.js零基礎處理GET、POST請求

瀏覽器訪問http://localhost:8000?id=1&name=demo,可以看到返回的數據了。

Node.js零基礎處理GET、POST請求

【原理講解】

接收GET請求數據還是很簡單的,關鍵點就是使用const query = querystring.parse(url.split('?')[1])把url中?後面的參數直接解析好了。

4 下載安裝postman

因為POST請求不能像GET請求一樣通過瀏覽器的URL直接發起請求,所以在講解處理POST請求之前,我們先postman這個工具軟件。

postman是一款可以模擬各種請求的工具,方便我們進行POST調試,否則我們還要去做一個靜態頁。通過ajax等方式去請求。

官方建議下載桌面端APP,www.getpostman.com/downloads/

5 處理POST請求

啟動postman,我們把請求方式改為POST,輸入請求地址http://localhost:8000/。

點擊下方的Body標籤,可以看到發起POST請求的content-type有好多種。

Node.js零基礎處理GET、POST請求

這裡我們以application/json和form-data為例,分別講解如何接收POST數據。

5.1 接收application/json數據

首先我們要知道的是,POST數據是以二進制流的方式進行傳輸,所以要不斷的接收數據,直到數據流結束。

修改bin/www.js:

Node.js零基礎處理GET、POST請求

【原理講解】

  1. 通過req.headers['content-type']獲取請求的數據格式,如果是applicatin/json則進入下面的邏輯。
  2. 創建postData變量,用來存儲post數據。
  3. 在接收數據流的時候,會不斷觸發request的data事件,postData持續累積數據。
  4. 當數據流接收完畢,會觸發request的end事件,返回給客戶端最終結果。

按照下圖設置postman:

Node.js零基礎處理GET、POST請求

點擊Send後,可在下方看到返回的JSON數據。

Node.js零基礎處理GET、POST請求

切換到Header標籤,可以看到返回數據的content-type為application/json。

Node.js零基礎處理GET、POST請求

5.2 接收form-data數據

在項目開發時,特別是jQuery項目,我們經常使用formData提交數據,例如:

Node.js零基礎處理GET、POST請求

如果用5.1章節的方式,接收到的數據是這樣的:

Node.js零基礎處理GET、POST請求

需要我們自行解析,比較麻煩。這裡推薦安裝multiparty插件。

Node.js零基礎處理GET、POST請求

修改bin/www.js:

Node.js零基礎處理GET、POST請求

【原理講解】

1.為何使用contentType.indexOf('multipart/form-data') !== -1來判斷是不是multipart/form-data類型?

因為通過form-data提交的數據content-type的值是類似

multipart/form-data;boundary=----WebKitFormBoundaryMxVY9JCuXKMvmRuL

的形式,因此使用indexOf()。

2.let form = new multiparty.Form()可方便的解析form-data數據。fields裡可以獲取提交的數據變量及值,files裡獲取提交的文件數據。

3.使用JSON.stringify()將對象轉化為JSON字符串返回給客戶端。

點擊Send之後,可以看到數據已經正常返回了。

Node.js零基礎處理GET、POST請求

以上就是本期分享,對GET和POST請求的處理方式進行了講解。這是基於Node.js開發後端服務最最基本的功能了,希望對你有所幫助。


分享到:


相關文章: