一尘不染

express.Router和app.get之间的区别?

node.js

我从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)

那么,两个示例之间有什么区别?

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


阅读 447

收藏
2020-07-07

共1个答案

一尘不染

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;

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

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

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

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

2020-07-07