Skip to content
This repository has been archived by the owner on Nov 12, 2024. It is now read-only.

使用url rewrite更友好的处理url #41

Open
xinglie opened this issue Jul 13, 2017 · 1 comment
Open

使用url rewrite更友好的处理url #41

xinglie opened this issue Jul 13, 2017 · 1 comment

Comments

@xinglie
Copy link
Member

xinglie commented Jul 13, 2017

在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版本中新增该功能,该功能默认不开启

@xinglie
Copy link
Member Author

xinglie commented Jul 22, 2017

修改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版本中新增该功能,默认开启

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant