express.Router和app.get的区别?

我从NodeJSExpress 4 ,我有点困惑。 我一直在阅读express网站,但不能看到_当使用路由处理程序或何时使用express.Router

正如我所看到的,如果我想显示一个页面或当用户点击/show例如我应该使用:

 var express = require('express') var app = express() app.get("/show", someFunction) 

开始的时候,我觉得这个比较老,对于express3 ,这是正确的还是这样呢?

如果这是express4的方法, express4使用的是什么?

我读了几乎相同的例子,但使用express.Router

 var express = require('express'); var router = express.Router(); router.get("/show", someFunction) 

那么,这两个例子有什么区别呢?

如果我只是想做一个简单的testing网站,我应该使用哪一个?

app.js

 var express = require('express'), dogs = require('./routes/dogs'), cats = require('./routes/cats'), birds = require('./routes/birds'); var app = express(); app.use('/dogs', dogs); app.use('/cats', cats); app.use('/birds', birds); app.listen(3000); 

dogs.js

 var express = require('express'); var router = express.Router(); router.get('/', function(req, res) { res.send('GET handler for /dogs route.'); }); router.post('/', function(req, res) { res.send('POST handler for /dogs route.'); }); module.exports = router; 

当在app.js中调用express() ,返回一个应用程序对象。 将一个应用程序对象想象成一个Express应用程序。

express.Router()被调用时,会返回一个稍微不同的“小应用程序”。 “迷你应用程序”背后的想法是,你的应用程序中的不同路线可能会变得相当复杂,你可以将该逻辑移到一个单独的文件中。

在上面这个简单的例子中, / dogs路由的逻辑已经被移到了它自己的文件中,所以它的GET和POST处理程序不会把app.js弄乱。 现在,您可以独立处理任何请求到/狗的逻辑,而不用担心它将如何影响/猫/鸟

如果您有与所有三条路线有关的逻辑(称为Express的中间件),则可以将其放在app.use(...)调用之上的app.js中。 如果您的逻辑与这些路由( / dog )中的一个有关,那么您只将它放在该路由的文件中。

Express 4.0附带新的路由器。 正如在网站中所提到的:

express.Router类可用于创build模块化可挂载的路由处理程序。 路由器实例是一个完整的中间件和路由系统, 由于这个原因,它通常被称为“迷你应用程序”。

https://scotch.io/tutorials/learn-to-use-the-new-router-in-expressjs-4上有一篇很好的文章,描述了不同之处以及路由器可以做些什么。;

总结

使用路由器,您可以更容易地模块化您的代码,您可以使用路由器:

  1. 基本路线:首页,关于
  2. 路由中间件将请求logging到控制台
  3. 使用参数路由
  4. 路由中间件的参数来validation特定的参数
  5. validation传递给某个路由的参数

注意:

Express 4中删除的app.router对象已经在Express 5中复出。在新版本中,它仅仅是基本Express路由器的参考,与Express 3不同,在Express 3中,应用程序必须显式加载它。

使用app.js写路由意味着它们可以被所有用户访问,因为app.js是在应用程序启动时加载的。 但是,在express.router()迷你应用程序中放置路线会保护和限制其可访问性。

 app.route('/book') .get(function (req, res) { res.send('Get a random book') }) .post(function (req, res) { res.send('Post a random book') }) 

如上例所示,我们可以在一个路由下添加不同的HTTP请求方法。

总之, express.Routerapp.get()相比,可以做更多的事情,比如中间件,而且可以用app.get()来定义一个路由器对象express.Router()