假设您有一个 AngularJS 应用程序连接到一个 RESTful API,并且您有一个“/item/:itemId”的路由。
.when('/item/:itemId', {
templateUrl: '/static/partials/item-detail.html',
controller: ItemDetailController
})
angular.module('angServices', ['ngResource']).factory('Item', function($resource) {
return $resource('/api/item/:itemId', {}, {
query: { method: 'GET', params: { itemId: '' }, isArray: true }
});
});
如果用户转到“/item/9”并且 itemId 为 9 的对象不存在,Angular 将从 API 收到 404,但不会自然地向用户返回 404。
在其他问题中,我看到人们建议创建一个拦截器并在找不到资源时让 Angular 重定向到 404 错误页面。
var interceptor = ['$rootScope', '$q', function(scope, $q) {
...
function error(response) {
if (response.status == 404) { window.location = '/404'; }
...
$httpProvider.responseInterceptors.push(interceptor);
但是,为了 SEO 目的,我想返回一个正确的 404 和原始请求的 URL。
此外,上面的解决方案首先加载页面,然后重定向(就像 Twitter 过去所做的那样),所以它不是最理想的。
在将请求传递给 Angular 应用程序之前,我是否应该先检查服务器端以查看资源是否存在?这样做的缺点是它不适用于应用程序中的断开链接。
解决这个问题的最佳方法是什么?