为了账号安全,请及时绑定邮箱和手机立即绑定

Node.js / Express.js-app.router如何工作?

Node.js / Express.js-app.router如何工作?

一只斗牛犬 2019-09-27 16:44:14
在我提出app.router疑问之前,我至少应该解释一下使用中间件时发生的事情。要使用中间件,使用的功能是app.use()。当执行中间件时,它将使用next()或使其调用下一个中间件,从而不再调用任何中间件。这意味着我放置中间件调用的顺序很重要,因为某些中间件依赖于其他中间件,而接近末尾的某些中间件甚至可能不会被调用。今天,我正在开发应用程序,并在后台运行服务器。我想进行一些更改并刷新页面,然后立即查看更改。具体来说,我正在更改布局。我无法使它正常工作,所以我在Stack Overflow中搜索了答案,并找到了这个问题。它说要确保它express.static()在下面require('stylus')。但是,当我查看该OP的代码时,我发现他app.router在中间件调用的最后就接到了他的电话,而我试图弄清楚为什么会这样。当我制作Express.js应用程序(版本3.0.0rc4)时,我使用了命令,express app --sessions --css stylus并且在我的app.js文件中,app.router在express.static()和require('stylus')调用上方都设置了代码。如此看来,如果它已经以这种方式设置,那么它应该保持这种方式。重新排列代码以便可以看到手写笔更改后,它看起来像这样:app.configure(function(){  //app.set() calls  //app.use() calls  //...  app.use(app.router);  app.use(require('stylus').middleware(__dirname + '/public'));  app.use(express.static(__dirname + '/public', {maxAge: 31557600000}));});app.get('/', routes.index);app.get('/test', function(req, res){  res.send('Test');});因此,我决定第一步就是要弄清楚为什么甚至app.router在我的代码中也很重要。因此我将其注释掉,启动了我的应用程序并导航至/。它显示我的索引页面很好。嗯,也许是可行的,因为我正在从我的路由文件(routes.index)中导出路由。因此,接下来我导航到/test它,并在屏幕上显示Test。哈哈,好吧,我不知道该怎么办app.router。无论它是否包含在我的代码中,我的路由都可以。因此,我肯定会缺少一些东西。所以这是我的问题:有人可以解释一下app.router它的作用,重要性以及在中间件调用中的位置吗?如果得到有关的简要说明,那也很好express.static()。据我所知,express.static()是我的信息的缓存,如果应用程序找不到请求的页面,它将检查缓存以查看其是否存在。
查看完整描述

3 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

在快速版本4中,我们可以通过以下方式轻松定义路由:


server.js:


const express = require('express');

const app = express();

const route = require('./route');


app.use('/route', route);

// here we pass in the imported route object


app.listen(3000, () => console.log('Example app listening on port 3000!'));

route.js:


const express = require('express');

const router = express.Router();


router.get('/specialRoute', function (req, res, next) {

     // route is now http://localhost:3000/route/specialRoute

});


router.get('/', function (req, res, next) {

    // route is now http://localhost:3000/route

});


module.exports = router;

在其中,server.js我们导入了route.js文件的路由器对象,并通过以下方式将其应用到server.js:


app.use('/route', route);

现在,中的所有路由route.js都具有以下基本URL:


HTTP://本地主机:3000 /路由


为什么采用这种方法:

采用这种方法的主要优点是现在我们的应用程序更加模块化。现在,可以将特定路由的所有路由处理程序放入不同的文件中,这使得所有内容都更易于维护和查找。


查看完整回答
反对 回复 2019-09-27
  • 3 回答
  • 0 关注
  • 592 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信