next()

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

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

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

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

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

路由中间件

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

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

  1. app.get('/user/:id/edit', loadUser, andRestrictToSelf, function(req, res){
  2. res.send('开始编辑用户 ' + req.user.name);
  3. });

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

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

  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的更多相关文章

  1. 【nodejs笔记3】Express基本用法,和路由控制,和模板渲染ejs

    1. 路由控制的工作原理 //routes/index.js中的代码//访问主页时,调用ejs模板引擎,渲染index.ejs模板文件,生成静态页面,并显示在浏览器中.router.get('/', ...

  2. 初步掌握node的路由控制

    1.1.2:node.js的路由控制 1.运行原理 在1.1.1节中,提到过app.js中app.get("/",routes.index)可以用以下代码取代: app.get(& ...

  3. express路由和中间件

    路由 简单来说,express路由就是用来处理一些请求,响应一些url地址. var express = require('express'); var app = express(); app.ge ...

  4. node——路由控制

    路由控制 前面我接触了如何使用express建立一个工程,虽然这个工程包含了一些基本的框架,但是没有实际内容,我们会不断给他增加的. 工作原理 我们在浏览器中访问app.js建立的服务器时,会出现一个 ...

  5. angularJs模块ui-router之路由控制

    在你的应用中大多数状态都有与其相关联的 url,路由控制不是设计完成 state 之后的事后想法,而是开始开发时就应该考虑的问题. 这里是如何设置一个基本url. $stateProvider .st ...

  6. Router和History (路由控制)-backbone

    Router和History (路由控制) Backbone.Router担任了一部分Controller(控制器)的工作,它一般运行在单页应用中,能将特定的URL或锚点规则绑定到一个指定的方法(后文 ...

  7. golang自定义路由控制实现(二)-流式注册接口以及支持RESTFUL

        先简单回顾一下在上一篇的文章中,上一篇我主要是结合了数组和Map完成路由映射,数组的大小为8,下标为0的代表Get方法,以此类推,而数组的值则是Map,键为URL,值则是我们编写对应的接口.但 ...

  8. rest_framework之解析器、路由控制、分页

    解析器 我们都知道,网络传输数据只能传输字符串格式的,如果是列表.字典等数据类型,需要转换之后才能使用 但是我们之前的rest_framework例子都没有转换就直接可以使用了,这是因为rest_fr ...

  9. Django-restframework之路由控制、解析器及响应器

    django-restframework之路由控制.解析器及响应器 一 前言 本篇博客介绍 restframework 框架的剩下几个组件,路由控制有三种:传统路由.半自动路由及全自动路由:解析器是用 ...

随机推荐

  1. python__Django 分页

    自定义分页的类: #!/usr/bin/env python # -*- coding: utf-8 -*- # Created by Mona on 2017/9/20 from django.ut ...

  2. 九、goroutine和channel

    进程和线程 A)进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单元 B)线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位 C)一个进 ...

  3. B-树 C++模板类封装(有图有真相)

    定义: 一棵m阶B-树是拥有以下性质的多路查找树: 1.非叶子结点的根结点至少拥有两棵子树: 2.每一个非根且非叶子的结点含有k-1个关键字以及k个子树,其中⌈m/2⌉≤k≤m: 3.每一个叶子结点都 ...

  4. 数据结构与算法之美 06 | 链表(上)-如何实现LRU缓存淘汰算法

    常见的缓存淘汰策略: 先进先出 FIFO 最少使用LFU(Least Frequently Used) 最近最少使用 LRU(Least Recently Used) 链表定义: 链表也是线性表的一种 ...

  5. each方法的简单使用

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/stric ...

  6. Elasticsearch-->Get Started-->Basic concepts

    https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started-concepts.html There ...

  7. hive学习8(小案例1练习)

    创建数据库 hive> create database feigu; hive> use feigu; 创建表 stg_job表 drop table if exists stg_job; ...

  8. hadoop mapreduce实现数据去重

    实现原理分析: map函数数将输入的文本按照行读取,   并将Key--每一行的内容   输出    value--空. reduce  会自动统计所有的key,我们让reduce输出key-> ...

  9. Codeforces Round #373 (Div. 2) E. Sasha and Array 矩阵快速幂+线段树

    E. Sasha and Array time limit per test 5 seconds memory limit per test 256 megabytes input standard ...

  10. Http协议与生命周期

    一.Http知识:    1.基于socket        浏览器(格式一)        web服务器(格式一)        MYSQL客户端(格式二)        MYSQL服务端(格式三) ...