我知道使用新的express 4路由器,我们可以将多个路由路径组织到不同的文件中,如下所示:
// 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`.
现在我想知道如果我在cars.js
和animals.js
文件中简单地用express()
来改变应用程序,它会起作用,因为这两个文件都充当了cars.js
()的新实例,我们称之为mini- express.Router()
。那么新的express.Router()
对象有什么用呢?
不是同样的方法在express.Router()
对象中公开,它们的功能可以通过多个express()
实例来实现,比如模块化路由器处理程序等吗?
发布于 2016-04-30 01:45:21
最简单地说,路由器是express应用程序的轻量级版本,或as Express docs put it,一个迷你express应用程序。
全局express对象提供了更多的资源来支持视图和各种设置,而路由器基本上提供了像.use
、.get
、.param
和route
这样的路由API。路由器对象代表中间件和路由的独立实例,并且只能执行中间件和路由功能,这使得它非常适合于有效地模块化路由处理。
现在我想知道,如果我在cars.js和animals.js文件中都使用express()
来改变应用程序,它会起作用,因为这两个文件都充当了cars.js()的新实例,我们称之为迷你应用程序。那么新的express.Router()
对象有什么用呢?
那么,您应该仍然能够使用express()
而不是express.Router()
来实现隔离路由目的,但是这样做也会带来许多可能不会使用的额外代码,因此这是一个不必要的开销。
这就是创建express.Router()
的原因:提供路由模块化,而不需要创建额外的应用程序。
相关:https://en.wikipedia.org/wiki/Liskov_substitution_principle
https://stackoverflow.com/questions/36905077
复制相似问题