«Не найдено», когда у routeProvider есть идентификатор

Я установил свой routeProvider как таковой:

routeProvider.when('/', {templateUrl: 'views/index.html', controller: 'IndexCtrl'});
  // $routeProvider.when('/ayat/:surah/:from/:to', {templateUrl: 'views/quran.html', controller: 'AyatCtrl'});
  $routeProvider.when('/:id/:range?', {templateUrl: 'views/quran.html', controller: 'QuranCtrl'});
  $routeProvider.when('/search?', {templateUrl: 'views/search.html', controller: 'SearchCtrl'});
  $routeProvider.when('/about', {templateUrl: 'views/about.html'});
  $routeProvider.when('/contact', {templateUrl: 'views/contact.html'});
  $routeProvider.when('/sorry', {templateUrl: 'views/sorry.html'});
  $routeProvider.otherwise({redirectTo: '/'});
  $locationProvider.html5Mode(true);
})

Всякий раз, когда я обновляю страницу, я получаю «Не найдено»

Я не сталкивался с этой проблемой, когда раньше у меня был

$routeProvider.when('/:extension/:id/:range?', {templateUrl: 'views/quran.html', controller: 'QuranCtrl'});
$locationProvider.html5Mode(false);

person Mohamed El Mahallawy    schedule 05.07.2014    source источник
comment
нужно будет настроить виртуальные каталоги на сервере, используя htaccess , web.config или что-то еще, что применимо к вашему серверу.   -  person charlietfl    schedule 05.07.2014
comment
Я использую angular-seed и запускаю сервер с npm start, не знаю, где это и есть ли htaccess   -  person Mohamed El Mahallawy    schedule 05.07.2014
comment
не сложно узнать как в поиске в сети ....node virtual directory   -  person charlietfl    schedule 05.07.2014
comment
в противном случае просто запустите хеш, используя false для html5Mode   -  person charlietfl    schedule 05.07.2014
comment
Я выполнил поиск и пришел к этому: stackoverflow.com/questions/10618418/ Не знаю, как это настроить   -  person Mohamed El Mahallawy    schedule 05.07.2014


Ответы (1)


файл package.json в исходном проекте указывает, что npm start просто запускает http-сервер, который является модулем узла. Похоже, он неправильно обрабатывает html5mode, потому что для этого ему необходимо перенаправить все запросы, которые не относятся к конкретному файлу, в ваш файл index.html. Вместо этого вы можете создать пользовательский сервер узлов, который довольно прост и просто обслуживает правильные файлы и позволяет обновлять ваш браузер и все такое.

Посмотрите на этот простой пример

добавьте это в корень вашего приложения (на том же уровне, что и папка приложения), а затем измените package.json, изменив свойство start скриптов на "start": "node server.js"

метод, который определяет, следует ли направлять запрос на index.html или нет, является этим

function isSpecificFile(path){
  var regex = /^\/(bower_components|css|img|js|partials)\/.*/;
  return regex.test(path);
}

Если у вас есть запрос типа localhost:8000/foo, это нужно сделать в angular, поэтому index.html будет загружен, а angular загрузит определенные файлы с запросами формы '/js/controllers/foo_ctrl.js', которые выиграл сервер не направлять на index.html.

Я бы искал более надежное решение для чего-либо подобного.

person bdwain    schedule 07.10.2014