Express 使用角度HTML5模式处理404&;快车?

Express 使用角度HTML5模式处理404&;快车?,express,angular-ui-router,Express,Angular Ui Router,将所有请求转发到我的JS路由器,很好。因此,重新加载localhost:3000/foo是可行的。然而,如果我的应用程序向我的服务器发出无效请求,它仍然只发送index.html,这使得推断打字错误比它应该的要困难一些 AFAIK处理这个问题的唯一方法是在Express和Angular中显式定义每个路由,其他的都是404。我遗漏了什么吗?通常的想法是让SPA处理路由。因此,无论您发送什么请求(这不是ajax),都将返回索引页。当页面使用拼写错误的url登录时,它将点击“否则”路径并返回到/ ap

将所有请求转发到我的JS路由器,很好。因此,重新加载localhost:3000/foo是可行的。然而,如果我的应用程序向我的服务器发出无效请求,它仍然只发送
index.html
,这使得推断打字错误比它应该的要困难一些


AFAIK处理这个问题的唯一方法是在Express和Angular中显式定义每个路由,其他的都是404。我遗漏了什么吗?

通常的想法是让SPA处理路由。因此,无论您发送什么请求(这不是ajax),都将返回索引页。当页面使用拼写错误的url登录时,它将点击“否则”路径并返回到
/

app.get('*', function(req, res) {
  res.sendFile('index.html', {
    root: './client/'
  });
});
如果您想要测量或处理它,那么您必须在路由中使用中间件

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

app.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', '$httpProvider', function Configurator($stateProvider, $urlRouterProvider, $locationProvider, $httpProvider) {
    $urlRouterProvider.otherwise('/');
    $locationProvider.html5Mode(true);
}])
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
        }
      );
    }
  });