文章目錄
- 框架特性
- express的使用
- 初始化項目:
- 下載框架模塊:
- 測試代碼:
- 總結以上代碼:
- 請求處理的中間件
- 概念:
- 中間件——app.use
- 基本用法:
- next的用法
- app.use中間件的應用
- 路由的保護
- 網站維護公告
- 自定義404(當用戶輸入與路由不匹配網址時)
- 錯誤處理中間件
- 同步錯誤處理
- 總結上面代碼:
- 異步錯誤
- 在回調函數中使用next
- 寫在最后
框架特性
- 提供了方便簡潔的路由定義方式
- 獲取HTTP請求參數進行了簡化處理
- 對模板引擎支持程度高,方便渲染動態HTML
- 提供了中間件機制有效控制HTTP請求
- 擁有大量第三方中間件對功能進行擴展
express的使用
初始化項目:
npm init -y
下載框架模塊:
npm i express
測試代碼:
const express = require('express')
const app = express()
app.get('/', (req, res) => {// res.send('你好,Express!')//輸出文本res.send({name:'zss'})//輸出json格式對象
})
app.listen(3000, () => {console.log('Server is running at http://127.0.0.1:3000')
})
總結以上代碼:
- 引入express框架模塊
- send 方法相較于 nodejs 原生的 end 方法更加強大 不同設置相應有的 content-tye
- 此方法會自動根據返回的數據設置相應的響應頭
請求處理的中間件
- 中間件就是以對方法,可以接受客戶端發來的請求,可以對請求作出響應,
- 也可以將請求繼續交給下一 個中間件繼續處理
- 登錄就可以使用中間件進行攔截處理
概念:
- 中間件主要由兩部分組成:中間件方法以及請求處理函數
- 中間件方法由express提供,負責攔截請求,請求處理函數由開發人員提供,負責處理請求
- 其實路由就是中間件
app.get('/', (req, res) => {res.send('<h1>hello,express</h1>') // 輸出html文本})//匹配以get方式請求的/路由
中間件——app.use
這里以 app.use 中間件為例,講解中間件的用法
- app.use 匹配所有請求方式和請求路徑,可以直接傳入請求處理函數
- app.use 第一個參數可以傳入請求地址,代表無論什么請求方式,只要請求的是這個地址就接收這 個請求
基本用法:
const express = require('express')
const app = express()
app.use((req, res) => {res.send('你不錯!')
})
app.get('/', (req, res) => {res.send('我是主頁')
})
app.get('/new', (req, res) => {res.send('我是添加')
})
app.listen(3000, () => {console.log('Server is running at http://127.0.0.1:3000')
})
- app.use會接收所有傳遞方式中的所有路由 導致后面的路由不會繼續匹配
next的用法
默認情況下,如果前面的路由已經匹配上,如果后面還有中間件,則不會執行,需要使用 next ,才會 向后執行
app.use中間件的應用
路由的保護
客戶端在訪問需要登錄的頁面時,可以先使用中間件判斷用戶登錄狀態,用戶如果未登 錄,則攔截請求,直接響應,禁止用戶訪問需要登錄的頁面
- 如果用戶未登錄
- 如果用戶已經登錄
網站維護公告
在所有路由的最上面定義接收所有請求的中間件,直接為客戶端作出響應,網站正 在維護中
自定義404(當用戶輸入與路由不匹配網址時)
const express = require('express')
const app = express()app.get('/', (req, res) => {res.send('我是主頁')
})
app.get('/new', (req, res) => {res.send('我是添加')
})//當用戶訪問地址與以上路由均不匹配時 進入下面的路由 因為下面會匹配任何路由
app.use((req, res, next) => {res.status(404).send('你訪問的地址不存在')
})app.listen(3000, () => {console.log('Server is running at http://127.0.0.1:3000')
})
錯誤處理中間件
程序中有兩類錯誤
- 代碼錯誤,這個在開發調試階段就可以解決掉
- 運行時錯誤:程序運行時才可能出現的錯誤,如讀取的文件不存在,連接數據庫時數據庫服務沒有 啟動,這類錯誤的發生與我們的代碼沒有關系
同步錯誤處理
同步錯誤發生后,錯誤處理能夠自動捕捉
下面手動的制造一個錯誤并拋出,錯誤處理能夠獲取錯誤信息
總結上面代碼:
不僅僅局限于手動拋出的錯誤 錯誤中間件才能夠捕獲 還包括同步中的調用未定義的方法 含有語法錯誤的對象 解析json字符串的錯誤
異步錯誤
異步錯誤發生后,錯誤處理中間件無法自動捕捉:使用next執行錯誤處理
例如:讀取不存在的文件錯誤
在回調函數中使用next
寫在最后
?原創不易,還希望各位大佬支持一下\textcolor{blue}{原創不易,還希望各位大佬支持一下}原創不易,還希望各位大佬支持一下
👍 點贊,你的認可是我創作的動力!\textcolor{green}{點贊,你的認可是我創作的動力!}點贊,你的認可是我創作的動力!
?? 收藏,你的青睞是我努力的方向!\textcolor{green}{收藏,你的青睞是我努力的方向!}收藏,你的青睞是我努力的方向!
?? 評論,你的意見是我進步的財富!\textcolor{green}{評論,你的意見是我進步的財富!}評論,你的意見是我進步的財富!