之前:
子模块: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 函数,向浏览器发送数据。