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

时间:2014-07-08 15:16:43

标签: javascript node.js express url-routing

我使用下面的代码了解一下新的express.js(4.0)。我无法理解为什么日志记录正在发生,无论我用浏览器点击哪条路径。它不应该只记录website.get而不记录api.get路径吗?

// 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''/'匹配,所以网站会应用于所有路线。有什么方法可以避免这种情况吗?

1 个答案:

答案 0 :(得分:4)

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

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