Nginx NodeJS Express - Router 3

 

http://www.codes51.com/article/detail_2787757_3.html

 

Router

Express还提供了一个叫做Router的对象,行为很像中间件,你可以把Router直接传递给app.use,

像使用中间件那样使用Router。另外你还可以使用router来处理针对GET、POST等的路由,

也可以用它来添加中间件,总之你可以将Router看作一个微缩版的app。

下面的代码创建一个Router实例:

 

var router = express.Router([options]);

 

然后你就可以像使用app一样使用router(代码来自http://expressjs.com/4x/api.html#router):

 

// invoked for any requests passed to this routerrouter.use(function(req, res, next) {
  // .. some logic here .. like any other middleware  next();
});

// will handle any request that ends in /events// depends on where the router is "use()'d"router.get('/events', function(req, res, next) {
  // ..});

 

定义了router后,也可以将其作为中间件传递给app.use:

 

app.use('/events', router);

 

上面这种用法,会针对URL中的“/events”路径应用router,你在router对象上配置的各种路由策略和中间件,都会被在合适的时候应用。

路由模块

express工具创建的应用,有一个routes目录,下面保存了应用到网站的Router模块,index.js和user.js。这两个模块基本一样,我们研究一下index.js。

下面是index.js的内容:

 

var express = require('express');
var router = express.Router();

/* GET home page. */router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

module.exports = router;

 

index.js创建了一个Router实例,然后调用router.get为“/”路径应用了路由函数。最后呢使用module.exports将Router对象导出。

下面是app.js里引用到index.js的代码:

 

var routes = require('./routes/index');
...
app.use('/', routes);

 

第一处,require(‘./routes/index’)将其作为模块使用,这行代码导入了index.js,并且将index.js导出的router对象保存在变量routes里以供后续使用。

注意,上面代码里的routes就是index.js里的router。

第二处代码,把routes作为一个中间件,挂载到了“/”路径上。

posted on 2017-09-14 15:21  fanbird2008  阅读(36)  评论(0)    收藏  举报

导航