博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nodejs express route 的用法
阅读量:4981 次
发布时间:2019-06-12

本文共 2636 字,大约阅读时间需要 8 分钟。

From: 

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( ...);

转载于:https://www.cnblogs.com/puncha/p/3876866.html

你可能感兴趣的文章
Java学习之equals和hashcode的关系
查看>>
一页纸商业计划书 (Business Plan) 模板(转载)
查看>>
什么是html
查看>>
妙用python之编码转换
查看>>
hdu 4451 Dressing 衣服裤子鞋 简单容斥
查看>>
TTTTTTTTTTTT Gym 100818B Tree of Almost Clean Money 树连剖分+BIT 模板题
查看>>
linux一些基本常识(四)
查看>>
Docker架构
查看>>
C#设计模式(3)——工厂方法模式
查看>>
过目不忘JS正则表达式
查看>>
bzoj1009: [HNOI2008]GT考试 ac自动机+矩阵快速幂
查看>>
Colidity-- StoneWall
查看>>
Leetcode 904. Fruit Into Baskets
查看>>
怎样连接REDIS服务端
查看>>
ajax同步,加载loading的bug
查看>>
秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别
查看>>
div滚动条
查看>>
iOS越狱程序开发
查看>>
一个监听事件监听多个按钮
查看>>
调用其他类的方法
查看>>