Javascript 什么';在Express中进行路由时,应用程序级和路由器级中间件之间的区别是什么?

Javascript 什么';在Express中进行路由时,应用程序级和路由器级中间件之间的区别是什么?,javascript,node.js,express,url-routing,Javascript,Node.js,Express,Url Routing,在报告中,它说: 应用程序级中间件使用app.use()和app.VERB()绑定到express实例 路由器级中间件的工作原理与应用程序级中间件类似,只是它们绑定到express.Router()的实例。在上面的示例中,在应用程序级别创建的中间件系统可以使用以下代码在路由器级别复制 在Express generator提供的应用程序中,我在主app.js中看到: var routes = require('./routes/index'); app.use('/', routes); 在/r

在报告中,它说:

应用程序级中间件使用app.use()和app.VERB()绑定到express实例

路由器级中间件的工作原理与应用程序级中间件类似,只是它们绑定到
express.Router()
的实例。在上面的示例中,在应用程序级别创建的中间件系统可以使用以下代码在路由器级别复制

在Express generator提供的应用程序中,我在主
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的用途是什么。使用
将其传递给
router.get
而不是简单地使用
app.get
?一般来说,
app.VERB
router.VERB
在路由方面有什么区别

app.get的用途是什么?将其传递给router.get,而不是简单地使用app.get

这一切都是为了模块化而设计的。它允许将一个应用程序划分为几个较小的松散耦合的部分,因为它们都不直接了解将它们组合在一起的共享
app
实例,所以实现了模块化

例如,您可以构建一个完整的用户帐户子系统,该子系统处理注册、登录、忘记密码等操作,并通过
app.use(require(“我的用户系统”)
在多个不同的应用程序中“挂载”它,从而在这些应用程序之间共享

这是唯一的目的。除此之外,没有任何功能、技术或性能差异

一般来说,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

const express = require('express')
const app = express()

var birds = require('./birds');
app.use('/birds', birds);

app.listen(3000, () => console.log('app listening on port 3000!\naccess http://localhost:3000/birds/'))
现在对的请求将转到birds.js文件

随着应用程序的发展,这种模块化方法将使维护大型代码库变得容易


来源:

应用程序具有侦听方法和路由器没有的其他方法

应用程序“做”主要的事情,而route只对一些路由进行分组,提供封装(参见Manohar的答案和示例)


路由器中的路由不一定预先知道它的完整路由是什么。请参见示例中的“/birds”在app.js中定义,app.js是birds.js中路由器的根目录。。。app.VERB和rourer.VERB的区别在于上下文。

所以
express.Router()
app=express()
将是同一个对象?@MichaelHirschler nope。通常,你有一个应用程序,但有几个路由器。