当前位置: 首页 > 面试题库 >

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

戚英逸
2023-03-14
问题内容

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

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

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


问题答案:

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(...)。如果您具有仅与那些路由之一相关的代码(中间件),则可以将其仅放入该路由的文件中。



 类似资料:
  • 问题内容: 我有一个具有以下用于路由的代码的应用程序: 现在,我必须将路由代码放在不同的文件中,因此我尝试使用此方法,但是它可能 无法 工作,因为它代替了它,而使用了: 如何使用将路由放入不同的文件中? 为什么,,,等,都没有在工作使用后在其中? 问题答案: 这是一个简单的例子: 在这里, 将实例安装在 ,这样添加到实例的任何路由都将相对于。

  • 问题内容: 我是表示和node.js的新手,我不知道app.use和app.get之间的区别。似乎您可以同时使用它们来发送信息。例如: 似乎与此相同: 问题答案: 用于将中间件绑定到您的应用程序。它是一个“ 安装 ”或“ 前缀 ”路径,并限制中间件仅适用于以它 开头的 任何请求的路径。它甚至可以用于嵌入另一个应用程序: 通过指定为“ mount ”路径,将响应以开头的所有路径,并且所有路径均与使用

  • 问题内容: 我错放了太多次了,我想我一直忘记,因为我不知道两者之间的区别,只是一个给了我我期望的价值,而另一个却没有。 为什么是这样? 问题答案: 是的简写形式(尽管请注意,该表达式只会被计算一次。) 是的,即指定一元的到。 例子:

  • 问题内容: 因此,我有一段简单的代码可以打印出整数1-10: 然后,如果仅在第3行上更改一个运算符,它将打印出无限数量的1整数(我知道为什么会这样做)。为什么在运行第二个程序时没有出现语法错误?如果赋值运算符后面跟着一个加法运算符,它不会调用语法错误吗? 问题答案: 与相同, 只是意味着。

  • 问题内容: 有人可以解释一下 和 我不知道“确切”的含义 问题答案: 在这个例子中,什么都没有。当您具有多个具有相似名称的路径时,该参数将起作用: 例如,假设我们有一个显示用户列表的组件。我们还有一个用于创建用户的组件。的网址应嵌套在下。因此,我们的设置可能如下所示: 现在,这里的问题是,当我们转到路由器时,将通过所有定义的路由,并返回它找到的第一个匹配项。因此,在这种情况下,它将首先找到路线,然