Я использую Angular 1.3.10, ui-router 0.2.10 и Express 4.14.0 для базового клона Reddit, и у меня возникают проблемы с маршрутизацией.Угловая: перезагрузка/переадресация URL-адресов по умолчанию по умолчанию
Мой (сокращенные) Экспресс-маршруты:
router.get('/api/home', function (req, res, next) {
res.render('index', {
title: 'Meanit'
});
});
router.get('*', function (req, res, next) {
res.redirect('/api/home');
});
Моя Угловая конфигурация состояние:
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), я перенаправлен сначала в/api/home через Express (предполагается, я думаю), а затем в/home через Angular вместо маршрута/posts/579d17934b0f5f6b2ff5c72c (НЕ предназначен).
Как заставить навигацию/перезагрузку URL оставаться на подпункте?
(я смотрел на AngularJS. Retain state after page reload, но я не понимаю, как настроить URL-синтаксический анализ/как адаптировать код из принятого ответа с учетом моего проекта.)
Как вы обработка ваших статических ресурсов (JavaScript, CSS, HTML, изображения и т.д.)? Является ли их экспресс, или вы используете другой веб-сервер, например nginx? – kennasoft
Не слишком знакомы с выражением, но мне кажется, что вы не хотите, чтобы выражение перенаправляло URL. Когда экспресс отправляет вас в/api/home, угловой не распознает его, потому что это не состояние, которое вы указали, так что вы попадаете в/home –
@kennasoft: я обслуживаю статику с помощью Express (общедоступные и просматриваемые папки). –