簡體   English   中英

Node.js和Express-擴充請求對象是一個好主意嗎?

[英]Node.js and Express - is augmenting the request object a good idea?

我開始學習Node.js,並嘗試結合微框架Express來了解它的體系結構。

我看到Express使用Connect作為中間件。 Connect通過一系列函數將各種內容擴展到請求和響應對象,並且它提供了API,因此您可以添加自定義中間件。 我猜想這種擴充是一種使處理程序/控制器中的事情簡單靈活的方式,而不是使用可變數量的參數和參數類型。 這是一個簡單的GET處理程序的示例:

app.get('/', function (req, res) {
    res.render('index', { title: 'Hey', message: 'Hello there!'});
})

在來自Node.js專家的教程中,我看到了諸如用MongoDB集合增強請求對象之類的東西。 Azat Mardan的博客中,我看到了以下代碼:

var db = mongoskin.db('mongodb://@localhost:27017/test', {safe:true})

app.param('collectionName', function(req, res, next, collectionName){
   req.collection = db.collection(collectionName)
   return next()
})

上面的方法使用路由名稱中的“ collectionName”參數作為控制請求增加的條件。 但是,我看到了丑陋的代碼,在沒有這種條件方法的情況下,通過Node.js的每個請求都附加了數據庫中間件。

看一下標准軟件原則,例如單一職責原則,關注點分離和可測試性,為什么用MongoDB集合對象和許多其他對象擴展請求是一個好主意? 請求和響應對象不是通過這種功能膨脹並且具有不可預測的狀態和行為嗎? 這種模式從何而來?利弊是什么?

這可以。 恕我直言, request對象的真正目的是作為一個容器,將事物向下傳遞給其他處理程序使用。 這比尋找一些商定的全球持有人要干凈得多。

您可能會爭辯說它應該基本上是空的,然后在request / response對象的某些屬性上具有“正式”的requestresponse功能,因此它比較干凈,但我認為這樣做的好處很小。

實際上,我所見過的幾乎所有中間件(包括查看快速的源代碼和我編寫的中間件)都對這種“容器將屬性和功能向下傳遞到處理程序堆棧”的容器使用了request

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM