在Express中路由时,应用层和路由器级中间件有什么区别?
在快速文档中 ,它说:
应用程序级中间件绑定到一个express实例,使用app.use()和app.VERB()。
路由器级中间件就像应用级中间件一样工作,除了它们绑定到
express.Router()
一个实例外。 上例中在应用程序级别创build的中间件系统可以使用以下代码在路由器级别进行复制。
在Express生成器提供的应用程序中,我在主app.js
看到:
var routes = require('./routes/index'); app.use('/', routes);
而在./routes/index.js
,我看到这个:
var express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); module.exports = router;
app.use
传递给router.get
而不是简单地使用app.get
的目的是什么? 一般来说, app.VERB
和router.VERB
在路由方面有什么区别?
app.use传递给router.get而不是简单地使用app.get的目的是什么?
这只是模块化devise。 它允许将应用程序分成几个较小的松散耦合的部分,因为他们都没有任何共享app
实例的直接知识,将它们组合在一起,所以可以实现模块化。
例如,您可以构build一个完整的用户帐户子系统,用于处理注册,login,忘记密码等,并通过app.use(require("my-user-system"))
。
这是这背后的唯一目的。 没有function,技术或性能差异。
一般来说,app.VERB和router.VERB在路由方面有什么区别?
没有不同。 该应用程序有它自己的主要/主要路由器和app.VERB
只是方便糖相当于app.router.VERB
。
一个例子将在这里帮助:
在birds.js中:
// birds.js var express = require('express'); var router = express.Router(); // middleware that is specific to this router router.use(function timeLog(req, res, next) { console.log('Time: ', Date.now()); next(); }); // define the home page route router.get('/', function (req, res) { res.send('Birds home page'); });
在app.js中:
// app.js var birds = require('./birds'); app.use('/birds', birds);
现在请求http:// localhost:3000 / birds /将会去birds.js文件。
随着应用程序的增长,这种模块化的方法将使维护大量的代码变得容易。
来源: https : //expressjs.com/en/guide/routing.html