[转]express 路由控制--next

Posted simonbaker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[转]express 路由控制--next相关的知识,希望对你有一定的参考价值。

next()

express的路由控制有个next()功能,在定义了多个路由的时候,对匹配的url会按顺序执行,

例如,有这样两个路由,第一个路由会对满足“/”的地址,在req中添加一个user的属性,然后再交给接下去的路由处理

所以当访问....../user时,可以从req中取出user信息

 

[javascript] view plain copy
 
  1. app.get(/^\/*/,function(req, res, next){  
  2.     req.user ="shuilan";  
  3.     next(); // 将控制转向下一个符合URL的路由  
  4. });  
  5.                      
  6. app.get(‘/user‘, function(req, res){  
  7.     res.send(‘viewing ‘ + req.user);  
  8. });  

 

用这种方式,可以对满足某一条件的url地址,先做一些处理(比如加载用户信息之类的),然后再转交给更具体的路由处理

 

 

路由中间件

与此功能类似的,还有路由中间件的功能,

一个路由中可以添加一个或者多个回调函数,如

[javascript] view plain copy
 
  1. app.get(‘/user/:id/edit‘, loadUser, andRestrictToSelf, function(req, res){  
  2.   res.send(‘开始编辑用户 ‘ + req.user.name);  
  3. });  

这个路由添加了3个处理函数,会按顺序执行

loadUser可以是形如这样的处理函数

[javascript] view plain copy
 
  1. function loadUser(req, res, next) {  
  2.   // 这里提供假数据,你可以从数据库中获取真实用户信息  
  3.   var user = users[req.params.id];  
  4.   if (user) {  
  5.     req.user = user;  
  6.     next();  
  7.   } else {  
  8.     next(new Error(‘不存在的用户 ‘ + req.params.id));  
  9.   }  
  10. }  

 

这样就能将多个路由都需要用到的处理提取出来,写成单独的函数,或者用来提前做一些条件判断

 

其他:

express的use()功能在api中的定义是app.use([path],function),

不指定path的情况下,对应的是默认的‘/‘,

当指定path时,会对匹配的url进行处理,

但是这里的path貌似不能像get、all那样进行正则匹配

 

参考:

http://www.csser.com/board/4f77e6f996ca600f78000936#/post/4f77ea1cbe3baa0d7800153c

http://expressjs.com/api.html

 

原文:

http://blog.csdn.net/haidaochen/article/details/8615621

以上是关于[转]express 路由控制--next的主要内容,如果未能解决你的问题,请参考以下文章

路由前的 Express-jwt 控制令牌

NodeJS框架express的途径映射(路由)功能及控制

在express中的root之后使用可选参数传递路由控制?

Next.js-express 动态路由导致页面重新加载

express.static() 的 Express 中间件没有正确路由并且抛出 next() 不是一个函数

ReactJS/Next.js:CRA 代理不适用于 Next.js(尝试将 API 请求路由到 Express 服务器)