【发布时间】:2016-12-05 08:45:53
【问题描述】:
我将 Angular 1.3.10、ui-router 0.2.10 和 Express 4.14.0 用于基本的 Reddit 克隆,但在路由方面遇到了问题。
我的(缩写)特快路线:
router.get('/api/home', function (req, res, next) {
res.render('index', {
title: 'Meanit'
});
});
router.get('*', function (req, res, next) {
res.redirect('/api/home');
});
我的 Angular 状态配置:
app.config([
'$stateProvider',
'$urlRouterProvider',
'$locationProvider',
function ($stateProvider, $urlRouterProvider, $locationProvider) {
$stateProvider
.state('home', {
url: '/home',
templateUrl: '/views/home.html',
controller: 'MainCtrl',
resolve: {
postPromise: [
'posts',
function (posts) {
return posts.getAllPosts();
}
]
}
})
.state('posts', {
url: '/posts/{id}',
templateUrl: '/views/posts.html',
controller: 'PostsCtrl',
resolve: {
post: [
'$stateParams',
'posts',
function ($stateParams, posts) {
return posts.getPost($stateParams.id);
}
]
}
})
.state('register', {
url: '/register',
templateUrl: '/views/register.html',
controller: 'AuthCtrl',
onEnter: [
'$state',
'auth',
function ($state, auth) {
if (auth.isLoggedIn())
$state.go('home')
}
]
})
.state('login', {
url: '/login',
templateUrl: '/views/login.html',
controller: 'AuthCtrl',
onEnter: [
'$state',
'auth',
function ($state, auth) {
if (auth.isLoggedIn())
$state.go('home')
}
]
});
$locationProvider.html5Mode(true);
$urlRouterProvider.otherwise('home');
}
]);
我的文件夹层次结构如下所示:
meanit
public
js
app.js (Angular)
routes
index.js (Express routes)
views (Angular templates)
index.html
home.html
posts.html
register.html
login.html
server.js
所有路由都按预期工作,但是当我在其中一个路由上重新加载页面或直接导航到路由 URL (/posts/579d17934b0f5f6b2ff5c72c) 时,我首先通过 Express 重定向到 /api/home(预期,我认为),然后通过 Angular 而不是 /posts/579d17934b0f5f6b2ff5c72c 路线(不打算)到达 /home。
如何强制 URL 导航/重新加载停留在子路由上?
(我查看了AngularJS. Retain state after page reload,但我不明白如何设置 URL 解析/如何根据接受的答案调整代码以适合我的项目。)
【问题讨论】:
-
您如何处理静态资源(javascript、css、html、图像等)? express 是否为他们提供服务,还是您使用其他网络服务器(如 nginx)?
-
对express不太熟悉,但在我看来你不希望express重定向URL。当 express 将您发送到 /api/home 时,angular 无法识别它,因为它不是您列出的状态,所以您最终会到达 /home
-
@kennasoft:我正在使用 Express(公共和视图文件夹)提供静态数据。
-
@ChrisNewman:抱歉,我已将 Express 路线添加到主帖中。 /api/home 应该呈现 index.html,其中包含我的 Angular 应用程序。
-
是否有特殊原因需要 express 来进行路由?而不是只使用 ui-router 和 angular?我建议您尝试使用其中一种。否则,每次刷新页面或粘贴 URL 时,您基本上都会被重定向两次(一次用于 express,一次用于 ui-router)。
标签: javascript angularjs node.js express angular-ui-router