使用Angular HTML5mode&处理404表达?

时间:2015-03-03 15:10:02

标签: express angular-ui-router

app.get('*', function(req, res) {
  res.sendFile('index.html', {
    root: './client/'
  });
});

将所有请求转发到我的JS路由器,非常棒。所以重新加载localhost:3000 / foo正在运行。但是,如果我的应用程序向我的服务器发出无效请求,它仍会发送index.html,这使得推断拼写错误比应该更加困难。

AFAIK处理此问题的唯一方法是在Express和Angular中明确定义每条路线,其他任何东西都是404.我错过了什么?

1 个答案:

答案 0 :(得分:0)

这个想法通常是让SPA处理路由。因此,无论您发送什么请求(不是ajax),您都将获得索引页面。当页面落入拼写错误的网址时,它将点击“其他”路线并恢复为/

app.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', '$httpProvider', function Configurator($stateProvider, $urlRouterProvider, $locationProvider, $httpProvider) {
    $urlRouterProvider.otherwise('/');
    $locationProvider.html5Mode(true);
}])

如果您想测量或处理它,那么您必须在路线中使用中间件。

要处理错误的ajax请求,您可以向请求对象添加“未处理”标志,如果匹配路由选择器,则使用middeware来处理它。如果它到达主发送块时没有,那么:

app.route('/*')
  .get(function (req, res) {
    console.log('in', req.unhandled, req.xhr);
    if (req.unhandled && req.xhr) {
      res.sendStatus(404);
    } else {
      res.sendFile(
        app.get('appPath') + '/index.html', {
          root: config.root
        }
      );
    }
  });