【发布时间】:2016-01-18 18:16:43
【问题描述】:
index.html:
<body ng-app="myApp">
<div ng-controller="MainController">
... {{ title }} ...
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li><a href="#/register" ng-hide="authenticated">Register</a></li>
<li><a href="#/login" ng-click="login">Login</a></li>
<li><a href="#" ng-click="logout">Logout</a></li>
</ul>
</div>
...
<div ng-view></div>
</div>
</body>
省略号以缩短 html。 MainController 只是设置 $scope.title = "My App"
在我的 Angular 模块中,我使用 ngRoute 并这样实现路由:
app.config(function($routeProvider)
{
$routeProvider
.when('/',
{
controller: 'MainController',
templateUrl: 'main.html'
})
.when('/login',
{
controller: 'AuthenticationController',
templateUrl: 'login.html'
})
.when('/register',
{
controller: 'AuthenticationController',
templateUrl: 'register.html'
});
});
我的 AuthenticationController 只是定义了登录和注册函数来对服务器进行后调用,但我没有进行这些调用,因为我没有点击登录或注册。
在将 ng-view 换成适当的视图方面,一切都很顺利,但是当我打开控制台时,每次切换视图时,都会出现“localhost:3000/login”过多的重定向。我觉得这很奇怪,因为无论我点击注册、登录、注销,它总是显示“localhost:3000/login”太多重定向。这是在 express 框架的上下文中,但我认为这不是我的服务器端的错误,因为它似乎没有在 express 中击中我的 app.use('/',index) 路由器。这正常吗?
编辑:这是我的索引路由器:
var express = require('express');
var router = express.Router();
router.get('/',function(req,res,next)
{
return res.render('index', { title: 'SERVER TITLE' });
}
);
module.exports = router;
在 app.js 中:
app.use('/', index);
app.use('/auth', authenticate);
app.all('*',function(req,res,next)
{
if(req.isAuthenticated())
{
return next();
}
else
{
res.redirect('/login');
}
});
【问题讨论】:
-
尝试同样的方法,关闭 $locationProvider 的 HTML5Mode。
$locationProvider.html5Mode(false) -
哦,我知道它已经关闭了。嗯。如果您错误地引用了
localhost:3000/login,那将来自您的服务器,因为您正在链接到哈希路由。分享您的服务器端代码以进一步调试? -
@dboskovic 我已经添加了我的服务器端代码......现在你已经将它缩小到服务器,app.all 调用似乎非常可疑。但是为什么我的哈希文件路径来自单击导航栏菜单项发出服务器请求?
-
我非常有信心他们最初是作为对您的模板的请求。 (参见 templateUrl)并被重定向到登录。也许确保您在 Angular 中正确定义/缓存模板?
标签: angularjs express mean-stack ngroute