Express 入门之Router - worldtree_keeper的专栏 - CSDN博客

要了解Router我们需要先知道到Application,首先,每一个express实例本身内部就内建了router,所以我们先从简单的下手,先使用application;另外这里我们只选择get方法,作为我们Router.Method, 之所以使用get是因为它足够简单;

 

精确匹配形式

1. get有很多种用法

 

 
  1. var express = require("express");

  2. var app = express();

  3. app.get("/example/c",function(req, res){

  4. res.send("Your url is /example/c");

  5. });

  6. app.listen(3000);

 

 

2. 参数形式

 

 

 
  1. var express = require("express");

  2. var app = express();

  3. app.get('/user/:userid',function(req, res){

  4. res.send(req.params.userid);

  5. });

  6. app.listen(3000,function(){console.log("server is listening on port 3000")});

 

参数形式另外的高级应用

 

3. 正则表达式的形式

 

 
  1. var express = require('express');

  2. var app = express();

  3. app.get(/example/,function(req, res){

  4. res.send('it is use regular expression');

  5. });

  6. app.listen(3000);

 

 

 

4.  神秘的参数 next

 

 

 
  1. var express = require('express');

  2. var app = express();

  3. var func1 = function(req, res, next){

  4. console.log("this is first func");

  5. next();

  6. }

  7. var func2 = function(req, res, next){

  8. //不能这么写,因为这样就相当于后面有设置了一遍head

  9. //res.send("this second func");

  10. console.log("this is second func");

  11. next();

  12. }

  13. var func3 = function(reg,res){

  14. console.log("this is thrid func");

  15. res.send("this is in the func3, end");

  16. }

  17.  
  18. //使用方式1

  19. app.get("/example/",func1,func2,func3);

  20.  
  21. //使用方式2

  22. app.get("/example/",[func1,func2,func3]);

 

匹配好之后就是res

res也有很多种形式

比如jsonp

 

 
  1. var express = require('express');

  2. var app = express();

  3. app.get('/example/defaultCallback?callback=foo',function(req, res){

  4. res.jsop({"message":"this is default callback"});

  5. });

  6. app.get('/example/customizeCallback?cb=foo2',function(req, res){

  7. app.set("jsonp callback name", 'cb');

  8. res.jsonp({"message":"this is customize callback"});

  9. })

  10. app.listen(3000);

默认情况下:http://localhost:3000/example/b?callback=foo

指定情况下:http://localhost:3000/example/c?cb=foo2

 

比如redirect

 
  1. app.get("/example/d", function(req, res) {

  2. var ua = req.get("user-agent");

  3. if (!!ua && ua.toLowerCase().match(/android|ipad|iphone|ipod/)) {

  4. console.log("this is mb");

  5. res.redirect("http://m.browser.baidu.com/mb");

  6. } else {

  7. console.log("This is pc");

  8. res.redirect("http://m.browser.baidu.com/pc");

  9. }

  10. });

 

http://localhost:3000/example/d

在chrome里面,打开开发者模式,切换模拟器。


 


参数形式高级应用

 

 
  1. var express = require('express');

  2. var app = express();

  3. app.get('/user/:userage/:userid', function(req, res, next) {

  4. console.log("in get method: userid:", req.params.userid);

  5. console.log("in get method: userage:", req.params.userage);

  6. next();

  7. });

  8.  
  9.  
  10. app.param("userage", function(req, res, next, value, key) {

  11. console.log("in param key:", key);

  12. console.log("in param value:", value);

  13. next();

  14. });

  15.  
  16.  
  17. app.param("userid", function(req, res, next, value, key) {

  18. console.log("in param key:", key);

  19. console.log("in param value:", value);

  20. next();

  21. });

  22.  
  23.  
  24. app.get('/user/:userid/:userage', function(req, res, next) {

  25. res.send("userid and userage are:", req.params.userid, req.params.userage);

  26. });

  27. app.listen(3000);

 

 

前后顺序与app.param的顺序无关,只与

app.get('/user/:userage/:userid', function(req, res, next) 的顺序有关。

 

OK,Application基本学习完毕了,我们就来说一下Router,其实没有什么大不同,基本上是一致的。

Router有几种参数形式:

1. function(func){}

2. function(url, function){}

第1种主要是针对于这个路由下的所有情况,都会使用经过这个回调函数的处理。

第2种情况是针对于这个路由下的指定的地址,才会触发回调函数的处理。

以下上干货:

 

 
  1. var express = require("express");

  2. var app = express();

  3. var router = express.Router();

  4. router.use(function(req, res, next) {

  5. console.log('%s %s %s', req.method, req.url, req.path);

  6. next();

  7. });

  8.  
  9.  
  10. router.use(express.static(__dirname + "/bar"), function(req, res, next) {

  11. next();

  12. });

  13.  
  14.  
  15. router.use(function(req, res) {

  16. res.send("Hello world");

  17. });

  18.  
  19.  
  20. app.use('/foo', router);

  21.  
  22.  
  23. app.listen(3000);

 

 

因为在app.use中已经制定了父级目录的地址,所以router只需要针对自己目录进行处理即可。

 

 

 

 

本文涉及的学习资源来源于

http://expressjs.com/en/4x/api.html#router.METHOD

你可能感兴趣的:(印象笔记收藏,JavaScript,Express)