Express.JS - 动态路由别名

时间:2017-01-07 03:02:17

标签: regex node.js express replace

我正在设计一个允许用户登录并与他人成为朋友的社区网站,并且可以通过以下路线访问他们的帐户:

https://domain.com/en/community/id/:userid AND
https://domain.com/en/community/users/:username

但是我想总是希望用户使用第一个URL,因为它看起来更美观。我可以直接从ID路由重定向,但是对于计划好的朋友和群组,我最终将使用URL,例如:

https://domain.com/en/community/id/:userid/friends
https://domain.com/en/community/users/:username/friends
https://domain.com/en/community/id/:userid/groups
https://domain.com/en/community/users/:username/groups

如何始终从/id/:userid重定向到/users/:username,但保留其余的网址?

第一项任务是将所有网址与/id/:userid匹配,以使用相同的路由回调。

第二项任务是将/id/:userid替换为/users/:username

使用正则表达式可以实现这两项任务吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

好的,事实证明允许用户ID别名非常简单。

我可以使用星号捕获所有其他URL,然后使用简单的RegExp替换调用将ID替换为用户名。

app.get('/:lang/community/id/:id/*', function(req, res){
    var id = req.params.id;
    User.getByID(id, function(err, result, user){
        var url = req.url.replace(new RegExp('/id/'+id, 'g'), '/users/'+user.name);
        res.redirect(url);
    }
});

这是我能想到的最佳解决方案。我希望它可以帮助其他人。