nodejs express route 的用法

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值