[关闭]
@kexinWeb 2017-02-22T11:43:06.000000Z 字数 3607 阅读 3264

Express.Router的用法

express.router node


写在前面

从Express4.0开始,路由Express.Router作为一个单独的组件独立出来。它像一个小型的express实例app一样,同样拥有自己的use、get、post方法。

原来的写法

  1. //app.js
  2. // 加载express模块后无需加载http模块,express模块本身就是对http模块的封装与拓展
  3. const express = require('express');
  4. //创建一个express实例
  5. let app = express();
  6. app.get('/', function(req, res) {
  7. res.send('This is home page.');
  8. });
  9. app.get('/article', function(req, res) {
  10. res.send('This is article page');
  11. });
  12. app.get('/record', function(req, res) {
  13. res.send('This is record page');
  14. });
  15. app.listen(8123);
  16. console.log('The server running on 8123');


使用Express.Router的写法

  1. //app.js
  2. // 加载express模块
  3. const express = require('express');
  4. //创建一个express实例
  5. let app = express();
  6. //创建一个express.router实例
  7. let router = express.Router();
  8. router.get('/', function(req, res) {
  9. res.send('This is home page.');
  10. });
  11. router.get('/article', function(req, res) {
  12. res.send('This is article page');
  13. });
  14. router.get('/record', function(req, res) {
  15. res.send('This is record page');
  16. });
  17. app.use('/', router);
  18. app.listen(8123);
  19. console.log('The server running on 8123');

乍看没有什么区别,用router有什么好处呢?

路由器挂载

关于Express.Router最关键的一点就是最后一行代码:

app.use('/', router);

它的意思就是把路由器实例router挂载到根目录'/'上,所以你访问'/','/acticle','/record'会正确route到目的页面。

如果把这一行代码修改为:

app.use('/blog', router);

那么访问路径就应该相应改变为'/blog/','/blog/article','/blog/record'。


为什么要使用Express.Router



- 一个根路径可以挂载多个Express.Router实例

  1. //app.js
  2. // 加载express模块
  3. const express = require('express');
  4. //创建一个express实例
  5. let app = express();
  6. //创建express.router实例
  7. let router1 = express.Router();
  8. let router2 = express.Router();
  9. //router1
  10. router1.get('/', function(req, res) {
  11. res.send('This is home page.');
  12. });
  13. router1.get('/article', function(req, res) {
  14. res.send('This is article page');
  15. });
  16. router1.get('/record', function(req, res) {
  17. res.send('This is record page');
  18. });
  19. //router2
  20. router2.get('/admin', function(req, res) {
  21. res.send('This is admin page.');
  22. });
  23. router2.get('/user', function(req, res) {
  24. res.send('This is user page');
  25. });
  26. //router1和router2实例挂载到根目录
  27. app.use('/', router1);
  28. app.use('/', router2);
  29. app.listen(8123);
  30. console.log('The server running on 8123');


  1. //app.js
  2. // 加载express模块
  3. const express = require('express');
  4. //创建一个express实例
  5. let app = express();
  6. //创建express.router实例
  7. let router = express.Router();
  8. router.get('/', function(req, res) {
  9. res.send('This is home page.');
  10. });
  11. router.get('/article', function(req, res) {
  12. res.send('This is article page');
  13. });
  14. router.get('/record', function(req, res) {
  15. res.send('This is record page');
  16. });
  17. //router实例挂载到'/admin'目录
  18. app.use('/admin', router);
  19. //router实例挂载到'/user'目录
  20. app.use('/user', router);
  21. app.listen(8123);
  22. console.log('The server running on 8123');


  1. //app.js
  2. // 加载express模块
  3. const express = require('express');
  4. //创建一个express实例
  5. let app = express();
  6. app.get('/admin/', function(req, res) {
  7. res.send('This is home page.');
  8. });
  9. app.get('/admin/article', function(req, res) {
  10. res.send('This is article page');
  11. });
  12. app.get('/admin/record', function(req, res) {
  13. res.send('This is record page');
  14. });
  15. app.listen(8123);
  16. console.log('The server running on 8123');


需要逐个路径配置,结构比较混乱,而改用Express.Router之后

  1. //app.js
  2. // 加载express模块
  3. const express = require('express');
  4. //创建一个express实例
  5. let app = express();
  6. //创建express.router实例
  7. let router = express.Router();
  8. router.get('/', function(req, res) {
  9. res.send('This is home page.');
  10. });
  11. router.get('/article', function(req, res) {
  12. res.send('This is article page');
  13. });
  14. router.get('/record', function(req, res) {
  15. res.send('This is record page');
  16. });
  17. //router实例挂载到'/admin'目录
  18. app.use('/admin', router);
  19. app.listen(8123);
  20. console.log('The server running on 8123');


  1. var router = express.Router();
  2. router.route('/')
  3. .post(function(req, res) {
  4. // ...
  5. })
  6. .get(function(req, res) {
  7. //...
  8. });
  9. });
  10. app.use('/', router);

从上面例子可以看到,Express.Router实例router的route方法,可以对同一路径配置不同的Http动词方法,由此简化了编程。


最后

总而言之,一项技术的出现总该有它出现的理由以及进步的地方,理解这些地方是学好这一项技术的好方法。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注