<center id="qkqgy"><optgroup id="qkqgy"></optgroup></center>
  • <menu id="qkqgy"></menu>
    <nav id="qkqgy"></nav>
    <xmp id="qkqgy"><nav id="qkqgy"></nav>
  • <xmp id="qkqgy"><menu id="qkqgy"></menu>
    <menu id="qkqgy"><menu id="qkqgy"></menu></menu>
    <tt id="qkqgy"><tt id="qkqgy"></tt></tt>

  • <>中間件

    中間件,估計大家在前幾節里面聽的耳朵都要出繭子了吧!一直提到,一直不講。別急,這不來了嘛

    <>準備工作

    拷貝第一節Hello World項目

    <>什么是中間件

    如果正在閱讀本書之前的你,已經有過一些其他框架或語言的后端開發經歷,那理應是知道中間件這個東西的。當然也不絕對,比如隔壁某個框架太貼心了,以至于筆者都覺得理所應當,在撰寫本節時,才驚覺原來在那個框架里竟內置了這么多的中間件。

    由于 express.js 是一個輕量級后端框架,因此中間件的身份變得非常的突出。

    在 express.js 中,中間件(Middleware)是指應用中,用于額外處理 HTTP
    請求和響應的函數,通常不涉及主體業務。中間件函數可以訪問請求對象(request object)(req)、響應對象(response
    object)(res)和應用程序中處理請求-響應循環流程的下一個中間件函數(next)。
    在 express.js 應用中,可以使用 use() 方法來掛載中間件函數。在處理 HTTP 請求時,express.js
    會按照添加中間件函數的順序依次調用它們,直到響應被發送為止。如果在某個中間件函數中沒有調用 next() 方法,則請求-響應
    循環流程會在該中間件函數隊伍中提前終止。

    中間件的應用主要在日志,鑒權,預檢,初步數據處理,異常處理等等。接下來,舉幾個簡單的例子:

    <>路由中間件

    是的,路由可以單獨抽離出來的中間件,可以掛載在app也可以作為子路由掛載在其他路由上
    //Route coule be middleware const routers = express.Router(); routers.get('/',
    function (req, res) { res.send('Hello World!'); }); routers.post('/', (req,res)
    => { res.send('Bad World!'); }) app.use(routers)
    <>鑒權中間件

    鑒權中間件,可以被掛載到單個路由,一系列路由以及app全局
    這是一個檢查請求頭token的鑒權中間件:
    //鑒權中間件,可以被掛載到單個路由,一系列路由以及全局 let auth = (req,res,next) => { if (req.headers[
    'token']!='evanp'){ return res.send('Unauthorized'); } next() } const
    router_root= express.Router(); router_root.post('/root', auth, (req,res)=> { res
    .send('Hello root!') }) app.use(router_root);
    <>異常處理中間件

    異常處理中間件,全局捕捉異常,防止服務器崩潰
    //異常中間件 const exhandler = (err,req,res,next)=> { return res.json({ "err":{
    "name": err.name, "msg": err.message }}); } app.use(exhandler); //測試接口
    router_err.get('/error', auth, (req,res)=> { const err = new Error("error!");
    err.name = "故意err"; err.message = "error!"; throw err; res.status(200).json({msg
    : 'good!'}); }) app.use(router_err);
    <>第三方中間件

    當然了,在實際生產中,并不需要每個中間件都我們自己寫,一是自己造輪子麻煩,而是自己造的輪子可用性不高,不夠專業,三是優秀團隊開發的中間件性能更好,隱患更小
    可以更多的使用第三方團隊開發的優秀的中間件,比如鑒權相關的passport.js,jsonwebtoken,sql相關的knex,sequelize等等。

    <>萬物皆可中間件

    上面給的幾個例子,都是屬于一個模塊的不同部分作為中間件掛載到當前的應用,在express.js中,中間件遠不止于次

    app也可以作為中間件掛載到app!一般是負責不同功能的app聚合到一個總的app上,比如訂單模塊單獨一個app,用戶模塊單獨一個app,一起掛載到作為整個完整系統的app上,這樣子把整個系統按不同模塊切割成獨立的app,更易于維護和管理,有點偽微服務架構的意味。

    router也能把app作為他的子中間件,這種做法應該很少用吧,暫時不清楚有什么應用場景。

    <>下一章-架構整合

    技術
    下載桌面版
    GitHub
    百度網盤(提取碼:draw)
    Gitee
    云服務器優惠
    阿里云優惠券
    騰訊云優惠券
    華為云優惠券
    站點信息
    問題反饋
    郵箱:ixiaoyang8@qq.com
    QQ群:766591547
    關注微信
    巨胸美乳无码人妻视频