magix
magix copied to clipboard
使用url rewrite更友好的处理url
在magix项目中我们一直使用hash做为url的记录。 当然我们也支持history.pushState来改变url magix中的url解析与处理
最终我们的url处理成path与params 两部分,而在magix项目中,通常path与view一一对应。
比如我们做一个展示用户相册的功能,我们可能这样设计url
/photo?userId=xxx&page=1&page_size=20
因为我们的模块photo是固定的,变化的只是用户id,所以我们把模块photo设计在path中,变化的userId放在参数中。
看过别的前端或后端web框架的,通常它们都有url重写功能,比如我们把这个url重写成
/xxx/photo?page=1&page_size=20
把用户id放在path中,对于个人用户会更友好一些
在magix当中该如何做呢?
考虑到向前兼容,旧的url我们要仍然支持
参考 UrlRewrite的设计 http://blog.csdn.net/dyllove98/article/details/9281453
在magix的配置项中增加rewrites配置,示例如下
Magix.config({
rewrites:[{
from:/$\/(.*)/photo$/,
to:'photo?user=$1'
}],
routes:{
'/photo':'app/views/default'
}
});
这样后续即使项目升级,改变了一些url,只要把旧的url重写到新的url上即可。
计划在3.5.3版本中新增该功能,该功能默认不开启
修改rewrites数组=>rewrite方法
原来的rewrites为一个数组对象,每次需要循环遍历,而且只能修改path,实际使用中有可能对参数也要重写,因此把原来的rewrites数组对象改为rewrite方法调用
Magix.config({
rewrite(path, params) {
var reg = /^\/(.+)\/photo$/;
var m = reg.exec(path);
if (m) {
if (!params.user) {
params.user = m[1];
}
return '/photo';//返回新的path
}
return path;//返回当前path
}
});
在3.5.3版本中新增该功能,默认开启