express(4.0)定制中间件在路由器的两个实例上运行,即使它只声明为一个

我正在使用下面的代码来了解一下新的express.js(4.0)。 我似乎无法理解为什么日志logging正在发生,无论我使用浏览器访问哪个path。 不应该只loggingwebsite.get而不是api.getpath?

 // Express 4.0 test... var express = require('express'); var app = express(); var website = express.Router(); var api = express.Router(); var port = process.env.PORT || 3000; website.use(function (req, res, next) { console.log(req.method, req.url); next(); }); website.get('/', function (req, res) { res.send('Home page'); }); website.get('/about', function (req, res) { res.send('About page'); }); api.get('/', function (req, res) { res.send({'json':'response'}); }); api.get('/user', function (req, res) { res.send({'user':'john'}); }); // app.get('/', function (request, response) { // response.writeHead(200, {"Content-Type": "text/html"}); // response.end("<h1>Hello, World!</h1>"); // }); app.use('/', website); app.use('/api', api); app.listen(port); console.log('http(s) server revved up on port ' + port); 

任何帮助将摇滚!

更新:我看到,因为'/api'匹配'/' ,网站被应用到所有路线。 有什么办法可以避免这种情况?

可能首先定义/ api路由器,另一个定义。

 app.use('/api', api); app.use('/', website);