傳統node服務器開發需要創建httpserver服務,需要讀取文件,還需要設置返回文件的格式。這和業務邏輯沒有任何關係。express框架簡化了這些操作。
一、基本入門
基本的安裝包
npm install express
express返回一個函數,函數執行結果是一個封裝好的服務器實例。
const express = require('express')
const server = express()
server.get('/',(req,res)=>{
res.send('hello express')
})
server.listen(8124)
console.log('Server running at http://localhost:8124')
創建了server實例之後監聽8124端口。
server.get是設置對以get方法請求服務器的響應。
核心http模塊的http.createserve模塊中的res.end變成了res.send。它可以自動設置返回文本的格式和編碼
在網頁請求Server running at http://localhost:8124響應結果如下
自動設置的響應頭如下所示
服務端可以直接返回對象數據而無需格外轉換成二進制
server.get('/list',(req,res)=>{
res.send({"name":"wxs"})
})
自動設置爲json格式。
此外,express也無需引入query.parse核心模塊來講請求中的query字符串解析成對象。req.query直接就是對象類型。
二、中間件
express可以爲所有請求設置中間件。語法是使用next參數。一般使用express.use進行攔截。他會對所有請求進行攔截,不論請求方法。
比如我要要對用戶登陸狀態進行檢查,如果登陸狀態爲true則顯示登陸成功,否則則顯示登陸失敗。服務端可以設置中間件如下顯示。
server.use((req,res,next)=>{
if(req.query.login_status == 'true'){
next()
}else{
res.send('登陸失敗')
}
})
server.get('/',(req,res)=>{
res.send('登陸成功')
})
如果login_status ,則執行next函數,next是use內函數的第三個參數,如果執行next,則會進入下一個中間件。請求從上到下依次經過中間件。直到res.send()或者報錯。
此時請求經過第一個serve.use,檢查login_status ,如果爲true則放行到下一個中間件。頁面響應如下