nodejs express route 的用法
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( ...);
nodejs express route 的用法的更多相关文章
- nodejs express的基本用法
demo /** * Created by ZXW on 2017/11/6. */ var express=require("express"); var server=expr ...
- nodejs+express Mvc站点
nodejs+express Mvc站点 像asp.net Mvc一样开发nodejs+express Mvc站点 首先,我是个c#码农.从事Mvc开发已然4个年头了,这两年前端MVC的兴起,我也跟风 ...
- 像asp.net Mvc一样开发nodejs+express Mvc站点
像asp.net Mvc一样开发nodejs+express Mvc站点 首先,我是个c#码农.从事Mvc开发已然4个年头了,这两年前端MVC的兴起,我也跟风学了一些,对前端的框架也了解一些,angu ...
- nodejs+express+socket.io
其实官网文档清楚了 https://socket.io/get-started/chat/ 但是因为之前写的是nodejs+express, socket.io是后加的, 还是有小坑 服务器端: 官 ...
- nodejs + express + express-session + redis
nodejs + express + express-session + redis 标题似乎又是不太对,大家领会精神哈 Express 安装express-generator,然后用它来创建一个工程 ...
- windows下nodejs express安装及入门网站,视频资料,开源项目介绍
windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件下载地址: ...
- React第一篇: 搭建React + nodejs + express框架
前提: 需要安装Node.js (>6)版本 1.cmd进到本地某个目录, 逐行输入以下指令(以下括号为注释) npm install -g create-react-app (全局安装cr ...
- vue+nodejs+express+mysql 建立一个在线网盘程序
vue+nodejs+express+mysql 建立一个在线网盘程序 目录 vue+nodejs+express+mysql 建立一个在线网盘程序 第一章 开发环境准备 1.1 开发所用工具简介 1 ...
- nodejs express开发
用NodeJS+Express开发WEB应用---第一篇 大漠穷秋2014-03-28 预热 为了对后面的内容理解更加透彻,推荐首先阅读下面这篇很好的文章: http://www.nodebeginn ...
随机推荐
- 【KMP求最小周期】POJ2406-Power Strings
[题意] 给出一个字符串,求出最小周期. [思路] 对KMP的next数组的理解与运用orz ①证明:如果最小周期不等于它本身,则前缀和后缀必定有交叉. 如果没有交叉,以当前的next[n]为最小周期 ...
- 找出N个数中最小的k个数问题(复杂度O(N*logk))
这是一个经典的算法题,下面给出的算法都在给定的数组基础上进行,好处时不用分配新的空间,坏处是会破坏原有的数组,可以自己分配新的空间以避免对原有数组的破坏. 思路一 先直接排序,再取排序后数据的前k个数 ...
- BUG:php7.1 访问yii数据库 自动加端口3306 报错
跟新完php7.1后访问yii项目出现下图错误 可见数据库链接是已经制指定了端口号9004 但是访问时后续自动加上了3306 原因:换了方式 //这种方式只支持5.6版本php 'db' => ...
- POJ 3680 Intervals(费用流)
Intervals Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5762 Accepted: 2288 Descrip ...
- 在XC2440的uboot中挂载U盘,利用FAT文件系统读写U盘文件
转:http://blog.chinaunix.net/uid-22030783-id-3347608.html 在XC2440的uboot_V1.3版本中已经支持USB HOST驱动和FAT文件系统 ...
- zk常见面试题
一个客户端修改了某个节点的数据,其它客户端能够马上获取到这个最新数据吗 ZooKeeper不能确保任何客户端能够获取(即Read Request)到一样的数据,除非客户端自己要求:方法是客户端在获取数 ...
- ecplise配置maven项目
1.新增环境变量 M2_HOME C:\Users\Administrator\Desktop\Java\maven\apache-maven-3.3.1 2.配置PATH路径 ;%M2_HOME ...
- Unity3D手机游戏开发
<Unity3D手机游戏开发> 基本信息 作者: 金玺曾 出版社:清华大学出版社 ISBN:9787302325550 上架时间:2013-8-7 出版日期:2013 年8月 开本:16开 ...
- JS 的一些基础算法题
1.翻转字符串 例子(要求:先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串) function reverseString(str) { str=str. ...
- scala 内部类
scala内部类不同于java内部类, java类中内部类从属于外部类,而scala的内部类从属于外部类对象 /** * 第一种方式 * 在内部类通过 外部类.this.成员名称 访问外部类成员 */ ...