在上一篇《在Node.js中实现Express(一)》中分享了关于安装到启动一个express的简单案例,相信随便在百度或者谷歌上一搜都是一大堆的,所以就不多说,今天分享的依然是express的相关使用之配置路由。
我们都知道,很多时候当你打开一个域名地址后面加上一个路由,你所见到的页面会根据你输入的路由不同而呈现出不同的页面,这就是对路由的控制。
不同语言对于路由的控制有着自己的理解和方法,对于node.js中通过app.<method>(path, [callback…], callback)来实现的。
method:是指HTTP请求的方法,如GET或POST。
path:是指要通过回调函数来处理的URL的路径部分。
callback:回调函数,接收Request和Response两个对象作为参数。
例如:
app.get('/', function(req, res){ .... }); app.get('/reg', function(req, res){ .... }); app.get('/login', function(req, res){ .... });
当然,express还可以通过下面的方式来进行特殊的处理:
app.all('/user/*', function(req, res){ // /user路劲的全局处理程序 });
我们处理通过上面的路由方式,同时还可以在路由中应用一些参数,比如 查询字符串、POST参数、正则或定义的参数等方式来处理。
对于查询参数和POST参数其实和普通的表单提交差不多处理,这里主要分享一下关于正则和自定义参数的方式,如下:
app.get(/^\/book\/(\w+)\:(\w+)?$/, function(req, res){ res.send(req.params[0] + ':' + req.params[1]); });
上面的代码就是表示通过正则来匹配,然后通过req.params来与url路径中的条目匹配成数组,最后显示出来即可。
如果是自定义参数来匹配路由进行处理,代码如下:
app.get('/find/:userid', function(req, res){ res.send(req.param('userid')); });
如果你输入网址 http://www.asni.cn/find/123,那么会显示123
如果你需要在里面进行路由中定义的参数,比如123,那么可以通过app.param()方法来注册一个回调函数,该方法接收已定义的参数作为第一个参数,然后是一个接收Request、Response、next和value参数的回调函数:
app.param(param, function(req, res, next, value){ … })
req和res对象与传递给路由回调函数的对象是相同的。next参数是一个用于已注册的下一个app.param()回调的回调函数(如果有的话)。你必须在回调函数中的某处调用next(),否则回调链将被破坏。value参数是从URL路径解析的参数的值。例如:
app.param('userid', function(req, res, next, value){ console.log(value); next(); });
它的好处就是如果定义的参数在URL中,你可以指定被执行的回调函数。当解析URL时,如果Express发现某个参数有注册的回调函数,它就在调用路由处理程序之前调用参数的回调函数。你可以为一个路由注册多个回调函数。例如:
app.get('/find/:userid', function(req, res) { res.send(res.param('userid')); }); app.param('userid', function(req, res, next, value) { res.send('Request with serid:' + value ); next(); });
那么今天主要就分享到这里,有疑问可以留言或者邮箱给我。
什么东西,怎么看不懂啊