2016-04-28 114 views
1

我知道使用新的Express 4的路由器,我們可以組織多個路由路徑到不同的文件是這樣的:express.Router()與多個express()對象之間的區別?

// In cars.js 
const router = express.Router(); 
router.get('/brands', function(req, res) { ... }); 
router.get('/models', function(req, res) { ... }); 
module.exports = router; 

// In animals.js 
const routerTwo = express.Router(); 
routerTwo.get('/domestic', function(req, res) { ... }); 
routerTwo.get('/wild', function(req, res) { ... }); 
module.exports = routerTwo; 

// In main.js 
app.use('/cars', router); // matches `/cars/brands`, `/cars/models`. 
app.use('/animals', routerTwo); // matches `animals/domestic`, `animals/wild`. 

現在我想知道如果我改變express.Router()與單純express()兩個cars.jsanimals.js文件,它因爲兩者都充當express()的新實例,我們稱之爲mini-app。那麼什麼是新的express.Router()對象?

express.Router()對象中顯示的方法與通過多個express()實例(如模塊化路由器處理程序等)可以實現的功能並不相同嗎?

回答

0

簡而言之,路由器是一個快速應用的輕量級版本,或者是一個小型快速應用程序as Express docs put it

全球快遞物件帶有更多的資源來支持觀點和各種設置,而路由器基本上提供路由API,如.use.get.paramroute。路由器對象代表一個孤立的中間件和路由實例,只能執行中間件和路由功能,這使得它非常適合高效模塊化您的路由處理。

現在我想知道如果我改變express.Router()在兩個cars.js和animals.js文件只是express(),它會工作,因爲這兩個充當)快遞的新實例(我們稱之爲迷你應用程序。那麼什麼是新的express.Router()對象?

那麼,你應該仍然能夠使用express()而不是express.Router()孤立路由目的,但你也把你大概不會用這樣這是一個不必要的開銷太多額外的代碼。

這就是創建express.Router()的原因:提供路由模塊化,而無需額外創建應用程序。

+0

我認爲不必要的開銷是無效的,因爲在同一個項目中多少次調用require('express')'(它是從nodejs doc緩存的)無關緊要。 –

+0

緩存使得應用程序的創建只發生一次,因此所有進一步的要求都會更快,但這並不會改變這一事實,即緩存的應用程序仍然包含很多額外的代碼,您不需要它們就可以進行路由。 – nem035

相關問題