expressJS:REST路由参数约定设置不正确?

时间:2018-11-22 21:17:17

标签: rest express

我正在做一个演示项目,我的一个路由器有一个简单但令人讨厌的问题。

对于项目ID,将其作为url参数传递。该项目为用户分配了专用视图(路由为/user/:userid/),通用视图(例如,路由为/group/:grouid/profile)以及用户专用但可以与通用视图实时共享数据的视图(例如。路由为/group/:groupid/:userid/)。

我目前有一个简单的中间件授权代码,可防止未注册用户访问组或私有用户视图以查看未注册的视图。代码摘要如下:

authorizationFunctionGroups: function(req, res, next) {
        console.log('in middleware authorizationFunctionGroups');
        console.log('userid', req.params.userid);
     if (!_.isEmpty(registers.groups) && _.get(registers.groups, req.params.groupid)) {
            //console.log(registers.groups[req.params.groupid]);
            console.log(registers.groups[req.params.groupid]['membersuserid']);
            registers.groups[req.params.groupid]['membersuserid'].indexOf(req.params.userid) > -1 ? next() : next(new Error("userid invalid or not in the group"));

        } else {
            next(new Error('Invalid groupid'));

        }
    }

但是,当我使用以下代码从前端的某些部分调用组配置文件路由器(/group/:grouid/profile)时:

$('#button1').click(() =>; window.location = '.../group/' + url.pathname.split('/').slice(-2)[0] + '/profile');

路由器感到困惑,将我的呼叫通过授权中间件传递并触发错误(“用户ID无效或不在组中” )。

该呼叫被拒绝,因为当frontend方法将呼叫传递给后端时,我的路由约定被卡住了,因为它无法将该呼叫的第二个参数(“配置文件”)识别为用户。

我发现解决此问题的方法是将我目前不喜欢的路由器/group/:groupid/profile更改为/group/:groupid/profile/profile

我必须将上面的代码替换为:

中间件

authorizationFunctionGroups: function(req, res, next) {
        console.log('in middleware authorizationFunctionGroups');
        console.log('userid', req.params.userid);
        if (req.params.userid == 'profile') { ///?????????
            res.redirect('/group/' + req.params.groupid + '/profile/profile');
        } else if (!_.isEmpty(registers.groups) && _.get(registers.groups, req.params.groupid)) {
            //console.log(registers.groups[req.params.groupid]);
            console.log(registers.groups[req.params.groupid]['membersuserid']);
            registers.groups[req.params.groupid]['membersuserid'].indexOf(req.params.userid) > -1 ? next() : next(new Error("userid invalid or not in the group"));

        } else {
            next(new Error('Invalid groupid'));

        }
    },

前端

$('#button1').click(() =>; window.location = '.../group/' + url.pathname.split('/').slice(-2)[0] + '/profile/profile');

两个问题

  • 很明显,我的主要问题是传统的问题。关于如何订购/命名路由器的任何建议/资源?

  • 我试图为每个人(组/:groupid / profile)保留一个视图,而不是使用相同的数据创建单个视图。但是:这是业界常见的最佳做法吗?如果没有,哪个更合适?

谢谢您的评论。

0 个答案:

没有答案