express的路由(Route)功能

之前:

子模块:var  router = express.router(); 使用router.get,router.post设置子路由,主模块引入子模块,并添加到中间件中app.use('/getConfig')   ============上篇随笔中有写到

看到其他博客中,这叫做:路由拆分(设置二级路由)获取动态数据 

修改:

子模块:var app = express(); 使用app.use,app.get/post;主模块引入子模块,并添加到主模块的app实例的中间件中app.use('/getConfig')  

知识点:

1、中间件:访问到最终目标之前做的事情,可以使用app.use,参考

功能):

  1.可以进行权限判断
  2.可以对res和req的属性进行扩充
  3中间键放在要执行的路径上面
  4中间键默认情况下都匹配,可以指定匹配什么开头

使用):在匹配到路由返回数据之前,如果想做一些处理,可以使用中间件

express内部有个map,对于每一种请求方法(get,post...)都有映射,每个都映射到一个 路由对象的数组。

//var app = express();
app.get('/',callback);//callback是一个函数
 
//map的get属性就会push进一个Route,即使多次对同一个路径进行app.get。当然可以给app.get的第二个参数传一个函数的数组,下面两段代码的执行效果是一样的
 
//first
app.get('/',[callback1,callback2]);
 
//second
app.get('/',callback1);
app.get('/',callback2);

第一个map的get数组里,会push进1个Route(里面的callbacks有2个元素),而第二个是push进2个Route(每一个的callbacks只有一个元素)

express 要路由到相应的处理函数,需要method和path两个都满足条件。

1.method就是'get'、'post'等,根据这个来找到map中相应的属性

2.然后在数组中,检查path是否符合里面的Route的要求,如果符合,相应的callback函数会依次(看后面的解释)执行。callback函数:

function(req,res,next){}

如果一个callback没有结束一个请求响应的生命周期( 比如写下res.end('...') ),那么一般需要在最后写上next(),像下面那样,这样,就会继续检查下面的一个Route

function(req,res,next){
    //..自己的业务逻辑
    next();
}

如果callback中,会终结一个请求响应周期(一般也是这样),那么不应该有next(),也不会继续检查下一个Route

//一般路由函数都应该和这个类似
function(req,res,next){
    //..自己的业务逻辑
    res.end('...');//或res.render('...')等
}
例如:
在app.js中的
app.get('/', routes.index);

的上面写下

app.get('/',function(req,res,next){
    console.log("11");
    next()
});
app.get('/',function(req,res,next){
    console.log("22");
    next()
});

那么请求主页的时候,控制台会依次输出11,22,最后执行routes.index 函数,向浏览器发送数据。


猜你喜欢

转载自www.cnblogs.com/xfpBlog/p/11272387.html