【问题标题】:Returning 404 in Angular在 Angular 中返回 404
【发布时间】:2015-11-30 08:24:53
【问题描述】:

当您访问不存在的页面时,我熟悉返回 404 作为 HTTP 状态代码。当您构建静态网站时,它运行良好且有意义,但在 Angular 中则不同。

假设我访问了/blah,但它不在我的路线列表中 - 然后我重定向到/not-found。但是,假设我访问了一个有效的 URL,例如 /stuff/123,但我的后端中不存在对象 Stuff123。然后我应该手动在我的 StuffController$location.path('/not-found')?

这是我现在的配置:

app.config(['$routeProvider', function ($routeProvider) {
  $routeProvider
    .when('/stuff/:id', {
        templateUrl: '/views/stuff.html',
        controller: 'StuffController'
    })
    .when('/not-found', {
        templateUrl: '/views/not-found.html'
    })
    .otherwise({
        redirectTo: '/not-found'
    });
});

另外,在 Angular 中返回 404 有意义吗?如果是这样,那我该怎么做呢?

【问题讨论】:

  • 是的,您可以将其添加到您的控制器中。

标签: angularjs model-view-controller http-status-code-404


【解决方案1】:

然后我应该在我的 StuffController 中使用 $location.path('/not-found') 手动进行重定向吗?

我不会重定向到未找到的路线。如果对象 Stuff123 不存在,它仍然不意味着 找不到路由找到了,只是没有这个特定参数的数据。您应该只显示适当的相应消息。

或者这样想。未找到是 404 状态码。这是错误代码。但是,您所描述的不是错误情况,只是缺少该 ID 的数据。因此,在经典应用程序中,您应该是 SUCCESS 200,只有空响应 [] 用于数据。所以又不是“未找到”。

【讨论】:

  • 谢谢,这是有道理的。您将如何向用户显示 Stuff123 不存在?
【解决方案2】:

我知道这有点旧,但我通过查找 404 和 angular 很容易找到它......

我认为您在使用“全能”路线时想要做的事情。包罗万象的路线是'**'。所以把这样的东西放在你的应用模块中......

        },
        {
            path: 'admin/orders',
            component: AdminOrdersComponent,
            canActivate: [AuthGuard, AdminAuthGuard]
        },
        { path: '**', component: CatchAllComponent }

通过这种方式,您可以在模板中为您的用户提供有用的信息,无论他们在地址栏中输入了什么内容,在犯错之后。

【讨论】:

  • 这仍然返回状态 200,而不是状态 404。
猜你喜欢
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多