【问题标题】:AngularJS ui route hash prefixAngularJS ui 路由哈希前缀
【发布时间】:2016-08-03 00:00:21
【问题描述】:

我正在使用 AngularJS ui 路由进行路由,我想删除 #(来自 URL 的哈希)。我正在使用此代码并在我的 index.html 文件中使用 (base href="/") 。它工作正常,但是当我像 (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
  })

【问题讨论】:

  • 您能否详细说明您的代码“不起作用”的原因?你期待什么,实际发生了什么?如果您遇到异常/错误,请发布它发生的行和异常/错误详细信息。请edit这些详细信息,否则我们可能无法提供帮助。
  • @FrankerZ...当用户登录时,我的登录页面状态为主页,它重定向到0.0.0.0:3000/athletepersonalinfo。它也可以正常工作,但是当我刷新此页面时,它会出现类似 Loopback 404 错误:无法获取/athletepersonalinfo at raiseUrlNotFoundError (/home/ali/Desktop/EmpyresServices/node_modules/loopback/server/middleware/url-not-found.js:20:17)
  • 要删除 url 中的哈希,您还应该处理服务器端的路由

标签: javascript angularjs angular-ui-router


【解决方案1】:

当您点击刷新时,服务器实际上会尝试查找给定路由是否已定义/athletepersonalinfo。要真正从 url 中删除 #,您必须包含一个 get(/*) 路由,该路由将始终返回您的 index.html 页面。这条路线应该在所有其他路线之后。现在这意味着您的index.html 将在没有定义路由时提供服务,而不是在您的客户端角度处理要加载的视图。进行此类更改时需要注意的几点

  • 由于任何未解决的 get 都可能返回您的 index.html,因此请确保您的路由有意义,就像您的所有资产都以 /assets/ 路径开头一样,所有 api 调用都以 /api/ 开头。

  • 这样做的好处是,如果您在某些资产或 api 调用上收到 404,您仍然会收到您的 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。

希望这会有所帮助。

【讨论】:

  • sry 但我不明白你的意思 我的 server.js 文件 app.start = function() { // 启动 Web 服务器 return app.listen(function() { app.emit('started '); var baseUrl = app.get('url').replace(/\/$/, ''); console.log('Web 服务器监听: %s', baseUrl); if (app.get( 'loopback-component-explorer')) { var explorerPath = app.get('loopback-component-explorer').mountPath; console.log('在 %s%s 浏览你的 REST API', baseUrl, explorerPath); } }); };
猜你喜欢
  • 2017-03-25
  • 2012-12-28
  • 1970-01-01
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
相关资源
最近更新 更多