angularjs - Angular ui-router按刷新导致404错误

标签 angularjs angular-ui-router

好的,我知道这是一个开放式问题,但是-

我正在使用 AngularJS 1.4.x 和 ui-router 运行一个应用程序。在大多数情况下,一切正常且符合预期。我的各个页面使用 ui-sref 进行导航,页面按预期显示,并且显示的 URL 看起来正确。但是,如果我在任何页面上刷新页面 (F5),则会导致 404 错误发生。并且输入 URL 不再有效。

可能涉及的事项:

  • 我打开了 $locationProvider.html5Mode(true)
  • 我用

    $rootScope.$on('$stateChangeStart', function (event, toState,
    toParams)

    管理页面访问(身份验证)
  • <base href="/">
    在我的 index.html 中,因为没有它 html5Mode() 将无法工作
  • 最佳答案

    问:当您刷新页面时,实际发生了什么?

    答:您正在通过浏览器向服务器发送 HTTP 请求。 GET /whatever .因此,服务器需要为此请求设置一条路由,该路由以 index.html 进行响应。 .目前,您收到的是 404因为您的服务器没有与对 GET /whatever 的请求匹配的路由.

    问:为什么?

    答:当您通过浏览器(而不是通过 AJAX)发出请求时,您的浏览器会尝试向您显示响应。前任。如果响应是 JSON,它会显示 JSON。如果它是一个字符串,它会显示一个字符串。如果它是一个 html 页面,它会告诉你。您不能只为任何路由发回模板,因为如果这样做,它只会在没有其他上下文的情况下呈现该模板。您需要 index.html加载 Angular ,运行你的 Controller ,将模板放在它的 ui-view 中容器等

    (将会发生的是 index.html 将被送回,UI Router 将检查路由,请求 templateUrl ,运行 Controller ,然后渲染它。)

    问:怎么样?

    答:这取决于 a) 您使用的服务器类型和 b) 您的文件结构。您可能希望在为 index.html 提供服务的路由文件末尾添加某种捕获所有路由。 .这就是我使用 Node/Express 的方式:

    app.get('/*', function(req, res) {
      var url = path.resolve(__dirname + '/../client/index.html');
      res.sendFile(url, null, function(err) {
        if (err) res.status(500).send(err);
        else res.status(200).end();
      });
    });
    

    关于angularjs - Angular ui-router按刷新导致404错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31820067/

    相关文章:

    javascript - AngularJS Ng-repeat,用表达式创建动态 dom

    javascript - $scope 元素更改后变为 "undefined"

    javascript - Angular 5将数据传递给子路由

    javascript - Angular JS 中跨多个文件的 Controller

    angularjs - 在ui-router中使用leftbar进行布局的嵌套状态或 View ?

    javascript - 如何使用 moment.js 获取日期范围

    javascript - Expressjs/AngularJS : Error after implementing req-flash

    angularjs - 使用 Appgyver Supersonic 移动应用程序中的 Express/Nodejs 进行身份验证

    javascript - Md-content 的宽度在 cordova 的应用程序中不是 100%

    angularjs - Angular ionic ui-router,其他 parent 的相同 subview