Node.js router() 用法混淆
Node.js router() usage confusion
为什么我们需要使用例如 var route = Router();
因为默认情况下下面的简单示例 express 已经完全使用了路由:
var express = require('express'),
app = express();
app.get('/login',function(req,res,next){
//..something
});
express.Router class 可用于创建模块化可安装路由处理程序。一个 Router 实例是一个完整的中间件和路由系统;因此,它通常被称为“迷你应用程序”。
以下示例将路由器创建为模块,在其中加载中间件,定义一些路由,并将其挂载到主应用程序的路径上。
在app目录下创建名为birds.js
的路由文件,内容如下:
var express = require('express');
var router = express.Router();
// middleware specific to this router
router.use(function timeLog(req, res, next) {
console.log('Time: ', Date.now());
next();
});
// define the home page route
router.get('/', function(req, res) {
res.send('Birds home page');
});
// define the about route
router.get('/about', function(req, res) {
res.send('About birds');
});
module.exports = router;
然后,在应用中加载路由器模块:
var birds = require('./birds');
...
app.use('/birds', birds);
应用程序现在能够处理对 /birds 和 /birds/about 的请求,同时调用特定于路由的 timeLog 中间件。
为什么我们需要使用例如 var route = Router();
因为默认情况下下面的简单示例 express 已经完全使用了路由:
var express = require('express'),
app = express();
app.get('/login',function(req,res,next){
//..something
});
express.Router class 可用于创建模块化可安装路由处理程序。一个 Router 实例是一个完整的中间件和路由系统;因此,它通常被称为“迷你应用程序”。
以下示例将路由器创建为模块,在其中加载中间件,定义一些路由,并将其挂载到主应用程序的路径上。
在app目录下创建名为birds.js
的路由文件,内容如下:
var express = require('express');
var router = express.Router();
// middleware specific to this router
router.use(function timeLog(req, res, next) {
console.log('Time: ', Date.now());
next();
});
// define the home page route
router.get('/', function(req, res) {
res.send('Birds home page');
});
// define the about route
router.get('/about', function(req, res) {
res.send('About birds');
});
module.exports = router;
然后,在应用中加载路由器模块:
var birds = require('./birds');
...
app.use('/birds', birds);
应用程序现在能够处理对 /birds 和 /birds/about 的请求,同时调用特定于路由的 timeLog 中间件。