express app和router的区别
var app = express(); 
var router = express.Router();
以上二者的区别是什么，什么时候用哪个最合适
区别看下面的例子：
app.js
```
var express = require('express'),
    dogs    = require('./routes/dogs'),
    cats    = require('./routes/cats'),
    birds   = require('./routes/birds');

var app = express();

app.use('/dogs',  dogs);
app.use('/cats',  cats);
app.use('/birds', birds);

app.listen(3000);
```
dogs.js
```
var express = require('express');

var router = express.Router();

router.get('/', function(req, res) {
    res.send('GET handler for /dogs route.');
});

router.post('/', function(req, res) {
    res.send('POST handler for /dogs route.');
});

module.exports = router;
```
在 `app.js` 中调用 `express()` 时，返回一个 `app` 对象。
`app` 对象可以看作创建了一个 `Express` 应用程序。
而当 `express.Router()` 被调用时，返回稍微不同的“迷你应用”。
“迷你应用程序”背后的想法是，应用程序中的不同路线可能变得相当复杂，你可以从将该逻辑移动到单独的文件中获益。
在上面这个简单的例子中，`/dogs` 路由的逻辑已经被移动到自己的文件中，所以它的 `GET` 和 `POST` 处理程序不会混乱 `app.js`。
现在，你可以独立地处理对 `/dog` 的任何请求的逻辑，而不用担心它将如何影响猫 `/birds`。
如果你具有与所有三条路由相关的逻辑（`Express` 中称为中间件），则可以将其放在 `app.use(...)` 调用上方的 `app.js` 中。
如果你有逻辑仅与其中一条路线（`/dog`）相关，那么你只将它放在该路由的文件中。
以上回答，来源于Differences between express.Router and app.get?
共同学习，给赞更好～～～
至于什么时候使用，其实上面的例子已经解释了。
如果代码非常简单，完全可以 `app.get('/',....)`,如果路由比较复杂，使用 `express.Router()` 更合适。