Angular.js - 重定向无法正常工作

时间:2013-04-21 17:01:12

标签: javascript node.js angularjs express pug

我很难理解Angular.js路由的行为

这是我的代码

我的app.js:

'use strict';

var app = angular.module('myApp', []).
  config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
    $routeProvider.when('/game/room', {templateUrl: 'roomGame', controller: roomCtrl});
    $routeProvider.otherwise({redirectTo: '/game/room'});
    $locationProvider.html5Mode(true);
  }]);

index.js我定义路由服务器端:

app.get('/game', function (req, res)
{
  console.log("we are in /game");
  res.render("game/index", {
      user: req.session
  });
});
app.get('/game/roomGame', function (req, res)
{
  console.log("we are in /game/roomGame");
  res.render("game/roomGame";
});

index.jade:

div(ng-controller="indexCtrl")
    a(href='/') Quitter

    div(ng-view)

还有另一个文件:roomGame.jade,但向你展示源代码并不重要。

现在我打开浏览器并输入:localhost:3000 / game。

正如预期的那样,我被重定向到localhost:3000 /游戏/房间,它向我显示了预期的视图。

但是当我输入:localhost:3000 / game / room或localhost:3000 / game / foo 它告诉我“不能GET / game / xxx”

我想被重定向到/ game然后到/ game / room。怎么可能?

1 个答案:

答案 0 :(得分:1)

当您看到预期视图时,是否会被重定向到http://localhost:3000/#/game/room?请注意#

当您输入http://localhost:3000/game/room时,这会点击快递服务器,而不是您的Angular应用,尝试匹配/game/room,因此会显示您正在看到的消息。

一个想法是在你的服务器上这样:

app.get('/game/:what', function (req, res) {
    res.redirect('/#/game/' + req.params.what);
});

或更有可能:

app.get('/game/*', function (req, res) {
    res.redirect('/#/game');
});

这会将事物从快递重定向到Angular可以处理它们的地方。

相关问题