使AngularJS和Express路线更好地协同工作?

时间:2016-11-14 00:30:35

标签: javascript angularjs node.js express

我有一个具有Express路由的节点应用程序。这些转发到AngularJS路由,有条件地加载单页首页应用程序的部分,或者如果没有会话则加载到登录页面。

我探索了使用AngularJS $locationProvider从URL中删除哈希字符,以便我可以拥有更干净的地址。我查看了这个问题的答案中的模块调整:Removing the fragment identifier from AngularJS urls (# symbol)

执行此操作时,会干扰Express级别设置的路由。副作用是应用程序不再路由到登录页面。因此,以下Express侧逻辑被忽略:

app.get('/', function(req, res) {
    if (req.session.user) {
        res.render('index', { username : req.session.username, msg : req.session.msg });
    }
    else {
        res.redirect('/login');
    }
});

/login路径有自己的Express路线。)

换句话说,应用程序就像用户总是登录一样,因为AngularJS的$routerProvider接管并显示(登录)首页:

function config($routeProvider) {
    $routeProvider
        .when('/', {
            templateUrl : '/partials/front/front.html', 
            controller : 'FrontPageController', 
            controllerAs : 'vm'
        })
        ...
        .otherwise({redirectTo: '/'});
}

如果我必须保留散列网址,是否有办法处理Express路由,以便我可以获得散列后的内容?

例如,我有以下地址,Express加载为/ GET路由,然后在AngularJS端处理,以将viewer特定部分加载到/ (前)页面:

https://foo.com/#/viewer?id=1234

我想要做的是转到Express路由并处理/ GET请求,以便我可以解析哈希后的内容并在登录后重定向。

基本上,我想要以下类型的逻辑:

app.get('/', function(req, res) {
    if (req.session.user) {
        res.render('index', { username : req.session.username, msg : req.session.msg });
    }
    else {
        if (req.query.id) { 
            res.redirect('/login?t=viewer&id=' + req.query.id); 
        } else {
            res.redirect('/login');
        }
    }
});

但在我有机会为重定向呼叫提取其值之前,看起来req.query.id会被删除。

在快速删除之前有没有办法获取URL,以便我可以解析它?

如果没有这个,如果我删除片段标识符(哈希),有没有办法让AngularJS和Express路由一起玩得很好?

0 个答案:

没有答案