如何强制Angular在HTML5模式下向服务器发送请求?

bib*_*rno 5 oauth node.js oauth-2.0 angularjs angular-routing

我正在使用angular和nodejs构建和web.我/home在/包含登录和注册表单的路径上加载Angular .这是我的角度配置:

window.app.config(['$routeProvider', '$locationProvider',
    function($routeProvider,$locationProvider) {
        $locationProvider.html5Mode(true);
        $locationProvider.hashPrefix('!');
        $routeProvider.
        when('/profile', {
            templateUrl: '/views/account.html',

        }).
        when('/edit', {
            templateUrl: '/views/edit.html',

        }).
        when('/home', {
            templateUrl: 'views/index.html'
        }).
        when('/signout', {
            templateUrl: 'views/signout.html'
            //on this view i load a controller which submits a form to /signout
        }).

        otherwise({
            redirectTo: '/home'
        });
    }
]);
Run Code Online (Sandbox Code Playgroud)

在服务器端路由:

    app.get('/',function(){
          res.render('index',{
             user: req.user? req.user:'guest'
        });
    });
    app.post('/login',function(){
             //if success redirect to /home
             //if fails redirect to /
    });
    app.get('/auth/facebook', passport.authenticate('facebook', { scope: [ 'email',                  'user_about_me', 'read_stream', 'publish_actions'], failureRedirect: '/' }));
  app.get('/auth/facebook/callback', passport.authenticate('facebook', { failureRedirect: '/' }), users.authCallback);
    app.get('/signout',function(){
             //signing out the user here...and redirects to /
    });
    app.get('/home',function(req,res){
        res.render('users/home',{
          user: req.user? req.user:'guest',
          message: req.flash('error')

        })
      }); 
    app.get('/profile',function(req,res){
        res.render('users/home',{
          user: req.user? req.user: 'guest',
          message: req.flash('error')

        })
      });
      app.get('/edit',function(req,res){
        res.render('users/home',{
          user: req.user? req.user:'guest',
          message: req.flash('error')

        })
      });
Run Code Online (Sandbox Code Playgroud)

如何我可以通过点击链接的链接发送请求/home去/auth/facebook,由于角度的路由,如果我点击Facebook的身份验证发送我/home.Angular阻止向服务器发送请求,它只是转到url /home,我尝试/home通过替换删除/.结果是相同的,只是没有加载视图.

Ste*_*wie 14

来自Docs:

在如下情况下,链接不会被重写; 相反,浏览器将执行整页重新加载到原始链接.

  • 包含目标元素的链接.例:<a href="/ext/link?a=b" target="_self">link</a>

  • 转到其他域的绝对链接.例:<a href="http://angularjs.org/">link</a>

  • 以'/'开头的链接,在定义base时会导致不同的基本路径.例:<a href="/not-my-base/link">link</a>

因此,作为最简单的解决方案,只需添加target="_self"到您的链接即可.