This is a question on how router is handled underneath. 

If I have router:

```
var router = express.Router();
router.get('/', function(req, res) {
  res.end('router');
});
app.use('/', router);

```

If I've fetch anywhere other than `http://localhost/`, say `http://localhost/whatever` I'll get a `Cannot GET whatever`. Who is giving out this message? I think it's the router, is it correct?

Now if I add a middleware after the router.

```
app.use('/', function(req, res) {
  console.log('-------> here');
});

```

Now if I go to `http://localhost/whatever`，then the browser never gets any response back and is just hanging there waiting for stuff.

So, it means the middleware architecture knows that if another middleware is added, then router does not have the final say. And it is expecting another route with possibly another router instance to be added. But if not, then router has the final say.

Isn't that kind of inconsistent? Somehow the router, which is itself a middleware, and the app object kind of know what each other is doing? Because router behave a little differently (call next() or give out "Cannot get" message) depending on whether another middleware is added.

I kind of dig into the code I can't really tell, but it looks like the entire middleware architecture is handled by the router object. Can someone explain a bit what's going on? Thanks.