express 中文社区:http://expressjs.jser.us/community.html

nodejs express route 的用法

1. 首先是最基本的用法。

1
2
3
4
5
var app=require('express').createServer();                                                    
app.get("/",function(req,res){                                                    
    res.send("hello world");                                                    
});                                                    
app.listen(3000);

当用户访问 127.0.0.1:3000的时候,页面会输出hello world

2. 加个路径试试。

1
2
3
4
5
6
7
var app=require("express").createServer();                                               
                                                                                                  
app.get("/toolmao",function(req,res){                                               
    res.send("welcome to toolmao");                                               
});                                               
                                                                                                  
app.listen(3000);

当用户访问 127.0.0.1:3000/toolmao的时候,就会输出welcome to toolmao

3. 更为复杂一点的,可以把路径作为参数。

1
2
3
4
5
6
7
var app=require("express").createServer();                                           
                                                                                          
app.get('/user/:id', function(req, res){                                           
    res.send('user ' + req.params.id);                                           
});                                           
                                                                                          
app.listen(3000);

当用户访问 127.0.0.1:3000/user/gainover 的时候,就会输出 user gainover

4. 3中的代码,也可以写为正则表达式的形式。

1
2
3
4
5
6
7
var app=require("express").createServer();                                       
                                                                                  
app.get(/\/user\/([^\/]+)\/?/, function(req, res){                                       
    res.send(req.params);                                       
});                                       
                                                                                  
app.listen(3000);

这里可以根据你的需要进行正则的自定义。正则中的匹配结果,存储在req.params参数中。

一个更复杂的正则的例子,如下:含有2个匹配。

1
2
3
app.get(/^\/users?(?:\/(\d+)(?:\.\.(\d+))?)?/, function(req, res){                                  
    res.send(req.params);                                  
});

请求时,输出如下:

1
2
3
4
5
6
7
8
$ curl http://dev:3000/user                                
[null,null]                                
$ curl http://dev:3000/users                                
[null,null]                                
$ curl http://dev:3000/users/1                                
["1",null]                                
$ curl http://dev:3000/users/1..15                                
["1","15"]

5. 如果我们想指定参数为id,同时又想用正则进行限制,可以写为:

/user/:id([0-9]+)

----------------------------------------------------------------------------

Route的依次执行

1. 当一个请求,能够匹配到多个route时,我们可以调用内置的next函数,来依次进行处理。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
app.get('/users/:id?', function(req, res, next){                       
    var id = req.params.id;                       
    if (id) {                       
        // do something                       
    } else {                       
        next();                       
    }                       
});                       
                                                  
app.get('/users', function(req, res){                       
    // do something else                       
});

当用户请求,/users/gainover时,可以进行某种处理,而当用户请求为/users/, id 不存在,则会调用next()函数,进而调用 app.get("/users/", ....);

2. 一个route里可以有多个处理函数。例如:

app.get('/users/:id/edit/',function1,function2,...);

一个实际的例子可能如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function loadUser(req, res, next) {           
  // You would fetch your user from the db           
  var user = users[req.params.id];           
  if (user) {           
    req.user = user;           
    next();           
  } else {           
    next(new Error('Failed to load user ' + req.params.id));           
  }           
}           
function andRestrictToSelf(req, res, next) {           
  req.authenticatedUser.id == req.user.id           
    ? next()           
    : next(new Error('Unauthorized'));           
}           
                          
app.get('/user/:id/edit', loadUser, andRestrictToSelf, function(req, res){           
  res.send('Editing user ' + req.user.name);           
});

当用户访问:/user/gainover/edit时,首先会调用第一个处理函数loadUser,判断用户是否存在于users中,如果不存在,通过next(new Error(msg)); 的方式抛出异常,否则,执行next(),而next此时实际就是指向 andRestrictToSelf 函数,然后判断当前登录的id和被编辑的id是否等同,如果等同,则继续next(),从而执行 res.send( ...);

原文地址:http://node-js.diandian.com/post/2012-07-03/40029072624

nodejs express route 的用法的更多相关文章

  1. nodejs express的基本用法

    demo /** * Created by ZXW on 2017/11/6. */ var express=require("express"); var server=expr ...

  2. nodejs+express Mvc站点

    nodejs+express Mvc站点 像asp.net Mvc一样开发nodejs+express Mvc站点 首先,我是个c#码农.从事Mvc开发已然4个年头了,这两年前端MVC的兴起,我也跟风 ...

  3. 像asp.net Mvc一样开发nodejs+express Mvc站点

    像asp.net Mvc一样开发nodejs+express Mvc站点 首先,我是个c#码农.从事Mvc开发已然4个年头了,这两年前端MVC的兴起,我也跟风学了一些,对前端的框架也了解一些,angu ...

  4. nodejs+express+socket.io

    其实官网文档清楚了  https://socket.io/get-started/chat/ 但是因为之前写的是nodejs+express, socket.io是后加的, 还是有小坑 服务器端: 官 ...

  5. nodejs + express + express-session + redis

    nodejs + express + express-session + redis 标题似乎又是不太对,大家领会精神哈 Express 安装express-generator,然后用它来创建一个工程 ...

  6. windows下nodejs express安装及入门网站,视频资料,开源项目介绍

    windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件下载地址: ...

  7. React第一篇: 搭建React + nodejs + express框架

    前提: 需要安装Node.js (>6)版本 1.cmd进到本地某个目录, 逐行输入以下指令(以下括号为注释) npm install -g create-react-app   (全局安装cr ...

  8. vue+nodejs+express+mysql 建立一个在线网盘程序

    vue+nodejs+express+mysql 建立一个在线网盘程序 目录 vue+nodejs+express+mysql 建立一个在线网盘程序 第一章 开发环境准备 1.1 开发所用工具简介 1 ...

  9. nodejs express开发

    用NodeJS+Express开发WEB应用---第一篇 大漠穷秋2014-03-28 预热 为了对后面的内容理解更加透彻,推荐首先阅读下面这篇很好的文章: http://www.nodebeginn ...

随机推荐

  1. NHibernate官方文档中文版——事务和并发(Transactions And Concurrency)

    NHibernate本身并不是一个数据库.它是一个轻量级的对象-关系映射工具.因此,它的事务管理代理给对应的数据库连接.如果这个连接代理了一个分布式的事务,ISession管理的操作就会自动成为整个分 ...

  2. 那些年我们踩过的坑-NSTimer

    昨天下午工作的时候遇见一个这样的需求,网络请求失败后把请求数据保存到本地,并自动重发3次,时间间隔是10秒,如果3次后还失败的话,下一次启动这个接口的时候,把新数据和保存在本地的数据都要发送,刚开始以 ...

  3. 经典相关分析,典型关分析, CCA,Canonical Correlation Analysis,多元变量分析,线性组合,相关系数最大化

    1.从概率论中相关系数推广而来 在概率论中,研究两个变量之间的线性相关情况时,提出了 相关系数 这个概念.做一下推广,如果研究一个变量和多个随机变量之间的线性相关关系时,提出了 全相关系数(或者复相关 ...

  4. 使用Gradle构建Android应用的渠道包

    所有做Android App的同志们应该都知道渠道包是什么,得力于Android生态的多样性,我等写Android应用的人类每次发布App都需要面对数十个市场,而为了能够采集到市场的表现数据,就必须为 ...

  5. JS isNaN()函数

    1.作用 isNaN() 函数用于检查其参数是否是非数字值. 2.JS <script> document.write(isNaN(123)); document.write(isNaN( ...

  6. CorelDRAW和Illustrator比较, 9 CorelDRAW Graphics Alternatives

    至于要不要学Illustrator,完全凭个人意愿.如果你精通Coreldraw,学不学都一样.因为二者几乎可以完全替代. CDR:是一个纯图形设计软件.排版比其他二个软件好用. 一般来讲CDR更适合 ...

  7. Python结合Shell/Hadoop实现MapReduce

    基本流程为: cat data | map | sort | reduce cat devProbe | ./mapper.py | sort| ./reducer.py echo "foo ...

  8. Mac系统使用VS Code编译Bootstrap 4

    环境: macOS 10.13.6 node.js 8.11.3 sass 1.10.3 bootstrap 4.1.3 vs code 1.25.1 Bootstrap3为我们提供了在线编译工具,可 ...

  9. sql server触发器复制记录

    Create Trigger test_tri5 on test after insert as begin declare @id sysname, @tel sysname, @name sysn ...

  10. 使用MapReduce实现二度人脉搜索算法

    一,背景介绍 在新浪微博.人人网等社交网站上,为了使用户在网络上认识更多的朋友,社交网站往往提供类似“你可能感兴趣的人”.“间接关注推荐”等好友推荐的功能,其中就包含了二度人脉算法. 二,算法实现 原 ...