AngularJS префикс хеша маршрута

0

Я использую маршрут 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
  })
  • 1
    Можете ли вы рассказать, как ваш код «не работает»? Чего вы ожидали и что на самом деле произошло? Если вы получили исключение / ошибку, опубликуйте строку, в которой это произошло, и сведения об исключении / ошибке. Пожалуйста, измените эти данные, иначе мы не сможем помочь.
  • 0
    @FrankerZ ... мое целевое состояние страницы является домашним, когда пользователь входит в систему и перенаправляет его на 0.0.0.0:3000/athletepersonalinfo .its, также работает нормально, но когда я обновляю эту страницу, она дает ошибку, такую как Loopback 404 Ошибка: Невозможно получить GET / athletepersonalinfo при повыситьUrlNotFoundError (/home/ali/Desktop/EmpyresServices/node_modules/loopback/server/middleware/url-not-found.js:20:17)
Показать ещё 1 комментарий
Теги:
angular-ui-router

1 ответ

1

Когда вы нажмете обновление, сервер на самом деле пытается найти, был ли данный маршрут определен /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 для каждого запроса.

Надеюсь это поможет.

  • 0
    извините, но я не понимаю вашу точку зрения. Мой файл server.js app.start = function () {// запустить веб-сервер return app.listen (function () {app.emit ('start'); var baseUrl = app. get ('url'). replace (/ \ / $ /, ''); console.log (прослушивание веб-сервера в:% s, baseUrl); if (app.get ('loopback-component-explorer') ) {var explorerPath = app.get ('loopback-component-explorer'). mountPath; console.log ('Просмотрите свой REST API на% s% s', baseUrl, explorerPath);}}); };

Ещё вопросы

Сообщество Overcoder
Наверх
Меню