2013-04-21 92 views
2

我有萨姆的困难,了解Angular.js路由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,但向您展示源代码并不重要。

现在我打开浏览器,输入:本地主机:3000 /游戏。

正如预期的那样,我重定向到本地主机:3000 /游戏/房间,这表明我预期的看法。

但是,当我进入:本地主机:3000 /游戏/室或本地主机:3000 /游戏/富 它为我“不能GET /游戏/ XXX”

我希望被重定向到/游戏,然后到/游戏/房间。怎么可能?

回答

1

当你看到预期的看法,你被重定向到http://localhost:3000/#/game/room?请注意0​​。

当您输入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'); 
}); 

这将从表达的东西重定向到角可以对付他们的地方。

+0

不,我请参见http://本地主机:3000 /游戏/间(不包括#),但如果我删除 “$ locationProvider.html5Mode(真);”来自app.js,并对app.js进行一些更改。我看到“http:// localhost:3000/Jeu1#/ room”。 – hamou92 2013-04-21 21:47:20