Express路由

Express利用HTTP动作提供了有意义并富有表现力的URL映射API,例如我们可能想让用户帐号的URL看起来像/user/12的样子,下面的例子就能实现这样的路由,其中与占位标识符(本例为:id)相关的值可以被req.params获取到。

URL路径和参数看起来没有任何分别,真正的区别在于,将被哪个对象获取,例如:下面例子和对应的URL:http://..../user/12,user将匹配路径,12将匹配参数:id,它将被req.params对象获取到。

app.get('/user/:id', function(req, res){
    res.send('user ' + req.params.id);
});

上例中当我们访问/user/12时返回“user 12”。

注:app.get相当于在服务器注册了一个监听get请求事件的侦听器,当请求的URL满足第一个参数时,执行后面的回调函数,该过程是异步的。

路由是一个可以被内部编译正则表达式的简单字符串,比如当/user/:id被编译后,被内部编译后的正则表达式字符串看起来会是下面的样子(简化后):

\/user\/([^\/]+)\/?

要实现复杂点的,我们可以传入正则表达式直接量,因为正则捕获组是匿名的因此我们可以通过req.params进行访问,第一个捕获组应该是req.params[0],第二个应该是req.params[1],以此类推。

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

通过不同的url来测试我们定义的路由:

http://127.0.0.1:3000/users/any
[
  null,
  null
]
http://127.0.0.1:3000/users/12
[
  "12",
  null
]
http://127.0.0.1:3000/users/12..28
[
  "12",
  "28"
]
下面是一些路由例子,以及与之相匹配的关联路径:
"/user/:id"
/user/12

"/users/:id?"
/users/5
/users

"/files/*"
/files/jquery.js
/files/javascripts/jquery.js

"/file/*.*"
/files/jquery.js
/files/javascripts/jquery.js

"/user/:id/:operation?"
/user/1
/user/1/edit

"/products.:format"
/products.json
/products.xml

"/products.:format?"
/products.json
/products.xml
/products

"/user/:id.:format?"
/user/12
/user/12.json

 

posted @ 2013-01-14 09:24  穆乙  阅读(4082)  评论(0编辑  收藏  举报