好的,書接上回,在安裝完成Node.js后,我們就可以開始使用它搭建簡單的服務端程式了,
Node.js模塊和包的使用
工程化的開發離不開專案之間的協作,在開始搭建服務端之前,我們有必要先簡單認識一下Node.js的模塊(Moudles)機制,這是Node.js進行專案間的封裝和依賴呼叫的途徑,
簡單來說,就是可以開發我們自己的模塊,打成包(package)發布出去,供他人使用,也可以在需要呼叫模塊內容時,獲取包含該模塊的包并將引入到代碼中,
那么引入其他模塊時需要使用的陳述句是require,他的語法是:
require(模塊名稱)
他會回傳該模塊向外匯出(exports)的物件或物件集合,
通常,需要定義一個變數來接受回傳的物件,例如
var http = require('http')
有些模塊是Node.js提供的模塊,如http,fs,path這些,稱作核心模塊
還有更多的是由用戶撰寫的模塊,像我們即將使用的express,body-parser等,稱作檔案模塊
檔案模塊并不直接存在于我們安裝的Node.js中,需要我們在控制臺中使用npm(Node Package Menager)工具進行安裝,常用語法是
npm install <package-name>
例如,安裝接下來會用到的express模塊:
npm install express
(除了使用包名還可以使用url進行安裝)
模塊機制和npm的使用還有很多內容值得了解,不過這不是這篇博客的重點,也不需要在一開始就刨根問底,總之,就先開始主要內容吧!
http搭建服務端程式
使用Node.js搭建服務端程式,是它能夠接收并處理http請求,
首先,需要引入http模塊,
var http = require('http')
接著,創建可以處理請求的服務端程式,對8080埠開放:
http.createServer((req,res)=>{
console.log('Node.js received a request!'); //控制臺列印接受到請求
res.end('Hello world from Node.js!'); //回應'Hello world from Node.js!'
}).listen(8080)
打開瀏覽器,訪問本地的8080埠:

使用Express框架
http模塊可以搭建服務端程式,但是對于路由,請求預處理,中間件集成等需求,僅使用它就會顯得有些無力,
這時,Express框架就出現了,他是目前在Node.js中使用最廣泛地服務端web應用框架,
在參考Express模塊之前,首先要在npm中安裝它,因為他不是Node.js內置的核心模塊:
npm install express
安裝成功后可以看到這樣的提示:

(@后面跟著的,是express模塊的版本號)
接著,使用express重新撰寫默認路徑的服務:
var express = require('express')//引入express模塊
let app = express()
//創建get請求服務,路由為默認路徑
app.get('/',(req,res)=>{
console.log('Node.js received a request')
res.end('Hello world from Node.js!')
})
//設定服務端監聽埠為8080,成功后回呼在控制臺上列印提示
let server = app.listen(8080,()=>{
console.log('The server is listening on port : 8080')
})
執行程式:

發送請求:

要撰寫其他url路徑下的服務,只需要更改方法中第一個引數即可:
app.get('/hello',(req,res)=>{
res.end('hello')
})
處理請求的引數
在能接收到請求之后,還有一個重要的問題是能夠接受到請求中的引數并正確決議他們,
下面重點總結一下get和post兩種請求的引數獲取方法
get請求
對于get請求,其引數是直接拼接在url后面的,決議也相對容易,在express框架中,get請求的引數全部都被放置在了request物件的query中,
如下面服務:
app.get('/get',(req,res)=>{
res.end('Here are params : ' + JSON.stringify(req.query))
})
發送get請求:

post請求
然而對于post請求,情況就沒有那么簡單了,
post請求可以以很多種形式發送資料,這取決于post請求的請求頭Content-type的內容
一般來說,常見的有三種:
- multipart/form-data
- application/x-www-form-urlencoded
- application/json
處理這些請求的引數,需要用到中間件的支持,為了處理這三種格式,我們需要引入這些中間件:
body-parser,用于處理application/x-www-form-urlencoded和application/json兩種格式connect-multiparty,用于處理multipart/form-data格式
先分別在檔案夾中使用npm安裝他們
npm install body-parser
npm install connect-multiparty
接著在代碼中引入他們:
var bodyParser = require('body-parser')
var multiparty = require('connect-multiparty')
處理 application/x-www-form-urlencoded 格式
為了他們能夠在express處理post請求的時候發揮作用,需要進行注冊
以接受x-www-form-urlencoded為例,
一種方式是直接在post方法中作為第二個引數傳入:
app.post('/post/x-www-form-urlencoded',bodyParser.urlencoded({extended:true}),(req,res)=>{
console.log('x-www-form-urlencoded')
res.end('Here are params : ' + JSON.stringify(req.body))
})
這種方式只能在該方法中使用中間件,如果需要所有方法都使用中間件,可以使用另一種方式將其全域注冊:
app.use(bodyParser.urlencoded({extended:true}))
全域注冊后,就不需要在post方法中傳入了,
測驗結果:

處理 application/json 格式
對于application/json型別,全域注冊陳述句如下:
app.use(bodyParser.json())
測驗服務代碼:
app.post('/post/json',(req,res)=>{
console.log('json')
res.end('Here are params : ' + JSON.stringify(req.body))
})
測驗結果:

處理 multipart/form-data 格式
全域注冊陳述句如下:
app.use(multiparty())
測驗服務如下:
app.post('/post/form-data',(req,res)=>{
console.log('form-data')
res.end('Here are params : ' + JSON.stringify(req.body));
})
測驗結果:

測驗完整代碼:
var express = require('express')
var bodyParser = require('body-parser')
var multiparty = require('connect-multiparty')
let app = express()
//處理 x-www-form-urlencoded
app.use(bodyParser.urlencoded({
extended:true
}));
//處理 application/json
app.use(bodyParser.json())
//處理 mutipart/form-data
app.use(multiparty())
app.get('/get',(req,res)=>{
res.end('Here are params : ' + JSON.stringify(req.query))
})
app.post('/post/x-www-form-urlencoded',(req,res)=>{
console.log('x-www-form-urlencoded')
res.end('Here are params : ' + JSON.stringify(req.body))
})
app.post('/post/json',(req,res)=>{
console.log('json')
res.end('Here are params : ' + JSON.stringify(req.body))
})
app.post('/post/form-data',(req,res)=>{
console.log('form-data')
res.end('Here are params : ' + JSON.stringify(req.body));
})
let server = app.listen(8080,()=>{
console.log('The server is listening on port : 8080')
})
參考資料
- 菜鳥教程
- 《深入淺出Node.js》
- 《Learn NodeJS in 1 Day》
- 《The node craftsman book》
- 《MERN Projects for Beginners》
其中的英文原著,博主整理在了 書單串列(booklist) 小專案中,歡迎小伙伴們光臨并查看下載,點點star就是對博主最大的鼓勵!
github倉庫
gitee倉庫
往期內容
- 【Node.js】下載安裝及簡單使用
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/333815.html
標籤:其他
上一篇:VUE版手寫日歷組件
