2016-04-28 112 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

相关问题