</pre>1. 基本路由方法。<p></p><p>(1) get post put del all(适合所有的http方法。)</p><p>(2) 所有方法有以下特征:</p><p><strong>map.get(path,handler, middleware, options); 可用这个方法一条一条设置路由。其参数如下:</strong></p><p></p><ul><li>path中可能包含参数——以冒号“:”开始的。参数是可选的当它放在“?”之后。然后用req.params对象接收这个参数。</li><li>handler 指定控制器名和action名并用#分隔。但是路由内置控制器名时,控制器将被指定。</li><li>middleware 是函数或者一组函数</li><li>options包含路径参数的对象</li></ul><p></p><p>最常用的是path和handler.用path指定路径,hander中指定其控制器和Action用#号分开。例如:</p><p></p><pre name="code" class="javascript">map.get('/users', 'users#index');
map.get('/users/:user_id', 'users#get') //users控制器 get Action
说明:按照官方文档,path和handler应该没有严格的对应关系。例如:
map.get('/view/users', 'students#list');用vie/users路径访问时,它应该会走到students控制器,list Action。但是在我测试的时候,它会报错提示 Undefined action view#users。这说明它要走到vie控制器,users Action. 而不是我们上面给指定的控制器和方法。
2. URL helper(URL助手)
它给我们提供方便的方法处理路径。
(1)
map.get('bunny','bunny#show');
pathTo.bunny() => /bunny
当然我们也可以使用上面的 as 设置一个名字。例如:
map.get('/some/action','some#action', {as: 'myAction'});
pathTo.myAction()=> '/some/action'
as是上面 map.get(path,handler, middleware, options);的options的一个可用参数。用来设置URL helper name
(2)如果有参数,URL helper将会接收参数。
map.get('profile/:user','users#show');
map.get('posts/:post_id/comments/:comment_id','comments#show');
pathTo.profile('Bugs_Bunny','users#show'); //这是官方文档的写法,看着两个例子对比着看 特别奇怪。可能有出入。
>'/profile/Bugs_Bunny'
pathTo.post_comment(2,2383); //注意这里的写法用 _ 但是这里的s为什么不用写 奇怪
>'/posts/2/comments/2383'
下面的方法是从官方文档上看到的,设置路由方法简单,但是不清晰,我自己并没有使用过。
3.先进的路由方法。
(1)namespaces: (将一组控制器放在admin 命名空间,就应该将一组控制器放进app/controllers/admin)
Eg:
map.namespace('admin', function (admin) {
admin.resources('users');
});
然后我们使用compoundroutes命令查看:
(2)resources
Eg:
map.resources('posts');
说明:
- 如果想改变resources默认指定的helper和path。可以使用两个参数。as和path.(就是改变上面第一列,或者第三列)例如
map.resources('posts', { path: 'articles', as: 'stories' });
- 如果你只需要几个action(例如:index,show)你可以使用only参数指定, except参数:指定除了创建哪些路由。
map.resources('users', { only: ['index', 'show'] });
注意:
- 这些内置的resource创建的路由只能创建出上面指定的action(index,create,new,update,destroy,show)。例如使用map.resources('users', { only: ['index', 'newindex'] }); 则newindex这个是不起作用的。
- 但是我们可以通过如下方法添加:
map.resource('users',function (user) {
user.get('avatar', 'users#avatar'); // /users/:user_id/avatar
user.get('top', 'users#top', {collection:true}); // /users/top
});
4. 路由对象可用compound 对象定义。
Eg:
compound.on('routes', function(map, compound) {
map.get('auth','session#auth');
});
It could be useful when you want to define some routesbefore application initialization. When app initializeduse compound.map object.
5.调试路由。
(1)使用compound routes命令打印出所有路由
(2)可以简写并加参数过滤。Compound r GET/new/posts
如上所示:过滤时可以指定以请求方式过滤 以action名过滤 以helper名过滤等。