《Nodejs實戰》筆記四:深刻了解Connect

1. 深刻了解Connect和Express

介紹最經常使用的模式, 放心食用!bash

Connect和Express有什麼關係呢?閉包

簡言之,Express是在Connect的基礎上,經過添加了一些高層語法糖擴展搭建出來的。app

2. Connect

2.1 簡單demo

Connect是Express的基礎,實際上用Connect就能作出完整的Web程序。koa

先來安裝connect函數

yarn add connect@3.4.0

寫一個hello,worldui

const app = require('connect')()

app.use((req, res, next) => {
    res.end('hello, world')
})

app.listen(3000)

2.2 瞭解Connect中間件的工做機制

Connect中間件就是一個js函數, 帶有三個參數req, res, next
重點說一下next,next是一個回調函數,當一箇中間件完成本身的工做,要執行後續中間件的時候,能夠調用這個回調函數url

一圖勝千言。
spa

值的注意的是,connect中間件是串行執行的,在koa中則是洋蔥模型code

2.3 本身寫一個logger中間件

const app = require('connect')()

const logger = (req, res, next) => {
    console.log('%s %s', req.method, req.url)
    next()
}
app.use(logger)
app.use((req, res, next) => {
    res.end('hello, world')
})

app.listen(3000)

寫中間件的時候必須調用next(),控制權纔會交回給分派器,才能調用下一個中間件regexp

2.4 寫一個更通用的可配置中間件

以前寫的logger函數,輸出信息是寫死在中間件裏的,所以不足夠好,此次建立一個更通用的中間件模式
爲了作到可配置, 這種模式通常都遵循一個原則。用一個函數返回另外一個函數(閉包)

const setup(options) {
    // 設置邏輯

    return function(req, res, next) {
        // 中間件邏輯

    }
}

下面重寫咱們的logger

const logger = (format) => {
    const regexp = /:(\w+)/g
    return (req, res, next) => {
        const str = format.replace(regexp, (match, property) => {
            return req[property]
        })
        console.log(str)
        next()
    }
}

app.use(logger(":method :url"))

注意到使用了正則,和replace方法

2.5 使用錯誤處理中間件

當你使用錯誤中間件的時候,Connect遇到錯誤時,會跳過其餘的中間件,直接跳到錯誤中間件

相關文章
相關標籤/搜索