express.Router 和 app.get 的区别?

新手上路,请多包涵

我从 NodeJS 和 Express 4 开始,我有点困惑。我一直在阅读 Express 网站,但看不到 何时 使用路由处理程序或何时使用 express.Router

如我所见,如果我想在用户点击 /show 时显示页面或其他内容,例如我应该使用:

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

一开始,我认为这是旧的(对于 Express 3)。是这样吗?或者这也是 Express 4 的方式?

如果这是 Express 4 中的方法,那么 express.Router 是做什么用的?

我阅读了与上面几乎相同的示例,但使用了 express.Router

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

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

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

原文由 nelson687 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

应用程序.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);

狗.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;

调用 var app = express() 时,会返回一个应用对象。将此视为 主要应用程序

调用 var router = express.Router() 时,返回的 小程序 略有不同。 迷你应用程序 背后的想法是,应用程序中的每条路线都可能变得相当复杂,您将从将所有代码移至单独文件中受益。每个文件的路由器都变成了一个 小应用程序,它的结构与 主应用程序 非常相似。

在上面的示例中, /dogs 路由的代码已移至其自己的文件中,因此不会弄乱 主应用程序/cats/birds 的代码在它们自己的文件中的结构类似。通过将此代码分成三个 小应用程序,您可以单独处理每个应用程序的逻辑,而不必担心它会如何影响其他两个应用程序。

如果您有与所有三个路由相关的代码(中间件),您可以将它放在 主应用程序 中,在 app.use(...) 调用之前。如果您的代码(中间件)仅与其中一个路由相关,则可以将其仅放在该路由的文件中。

原文由 Nocturno 发布,翻译遵循 CC BY-SA 4.0 许可协议

Express 4.0 带有新的路由器。正如网站上提到的:

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

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

总结一下

使用路由器,您可以更轻松地模块化代码。您可以将路由器用作:

  1. 基本路线:家,关于
  2. 路由中间件将请求记录到控制台
  3. 带参数的路由
  4. 为参数路由中间件以验证特定参数
  5. 验证传递给特定路由的参数

笔记:

在 Express 4 中删除的 app.router 对象在 Express 5 中卷土重来。在新版本中,它只是对基本 Express 路由器的引用,这与 Express 3 不同,其中一个应用程序必须显式加载它。

原文由 Alireza Fattahi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题