zoukankan      html  css  js  c++  java
  • [转]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

  • 相关阅读:
    win7 安装 memcached
    Nginx执行php显示no input file specified的处理方法
    Nginx配置SSI
    Windows Services
    如何安装mysql服务
    windows下nginx+php简单配置
    Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分
    php常用方法总结
    弹出框以及提示插件lghdialog.js的使用
    webservice的简单示例的实现步骤
  • 原文地址:https://www.cnblogs.com/simonbaker/p/5258242.html
Copyright © 2011-2022 走看看