Я использую маршрут AngularJS ui для маршрутизации. Я хочу удалить # (хэш из URL). Я использую этот код, а также используя (base href= "/") в моем файле index.html. Он работает нормально, но когда я обновляю страницу (http://0.0.0.0:3000/athletepersonalinfo
), это дает мне ошибку.
.config(function($stateProvider,$locationProvider) {
$locationProvider.html5Mode({ enabled: true, requireBase: false })
$stateProvider
.state('/', {
url: '',
templateUrl:HTML.HOME,
controller: 'homeController as home'
})
.state('home', {
url: '/',
controller: 'homeController as home',
templateUrl: HTML.HOME
})
.state('athletepersonalinfo', {
url: '/athletepersonalinfo',
controller: 'athleteProfileInfo',
templateUrl: HTML.ATHLETE_PERSONAL_INFO,
authenticate: true
})
Когда вы нажмете обновление, сервер на самом деле пытается найти, был ли данный маршрут определен /athletepersonalinfo
. Чтобы фактически удалить # из URL-адреса, вам нужно будет указать маршрут get(/*)
который всегда будет возвращать вашу страницу index.html
. Этот маршрут должен быть после всех других маршрутов. Теперь это означает, что ваш index.html
будет обслуживаться всякий раз, когда маршруты не определены, чем на вашей стороне клиента, угловой будет обрабатывать представление, которое нужно загрузить. Немногие моменты, которые следует учитывать при совершении таких шагов
Поскольку любой неразрешенный get может вернуть ваш index.html, убедитесь, что ваши маршруты имеют смысл, как и все ваши активы, начиная с /assets/path, все ваши вызовы api начинаются с /api/.
Преимущество при этом заключается в том, что если вы получаете 404 на некоторых активах или вызов api, вы все равно получите свой index.html
который является неправильным. Но при таком подходе все, что вам нужно сделать, это установить маршрут, подобный этому
app.get('/:url(api|assets)/*',function(req,res){
res.status(400).send("Not Found")
});
app.get('/*',function(req,res){
res.sendFile('index.html');
});
Убедитесь, что * маршрут определен после всех остальных маршрутов, и вы будете продолжать получать index.html для каждого запроса.
Надеюсь это поможет.