在浏览器中直接访问URL时,angular度路由不起作用,但在点击后工作?

我有一个目录结构的angular度应用程序

app ..views ....partials ......main.jade ......foo.jade ....index.jade 

和路线定义如下:

“严格使用”;

 angular.module('myApp', [ 'ngCookies', 'ngResource', 'ngSanitize', 'ngRoute', 'firebase', 'myApp.config' ]) .config(function ($routeProvider, $locationProvider) { $locationProvider.html5Mode(true); $routeProvider .when('/', { templateUrl: '/partials/main', controller: 'MainCtrl' }) .when('/foo/:fooName', { templateUrl: '/partials/foo', controller: 'FooCtrl' }) .otherwise({ redirectTo: '/' }); }); 

我在服务器端使用快递,相关的代码是:

  // server.js app.configure('development', function(){ app.use(express.static(path.join(__dirname, '.tmp'))); app.use(express.static(path.join(__dirname, 'app'))); app.use(express.errorHandler()); }); app.configure('production', function(){ app.use(express.favicon(path.join(__dirname, 'public/favicon.ico'))); app.use(express.static(path.join(__dirname, 'public'))); }); app.get('/', routes.index); app.get('/partials/:name', routes.partials); //routes.js exports.index = function(req, res){ res.render('index'); }; exports.partials = function(req, res){ var name = req.params.name; res.render('partials/' + name); }; 

主要路线"/"加载罚款,当我点击"/foo/bar"部分视图foo.jade加载按预期。 然而,当我尝试直接在URL中访问"/foo/bar"时,我得到一个来自Express的"cannot GET /foo/bar"的404响应,这是有道理的,因为没有这样的快速定义的路由。 不过,我认为这是定义angular度路由器的全部意义..它应该拦截这个请求,实际上要求"/partials/foo" 。 我尝试添加

 //redirect all others to the index (HTML5 history) app.get('*', routes.index); 

但它没有解决问题,似乎甚至赶上静态js资产的请求和响应index.html的内容是非常糟糕的。 我确定我做错了什么。 我如何解决这些问题,以便我可以直接访问这些url?

路由performance为这样的原因是html5mode打开。 注意这行: $locationProvider.html5Mode(true);

您需要了解,当您尝试直接访问"/foo/bar" ,浏览器会向此URL发送HTTP GET请求。 当您尝试通过链接点击访问此url时,就像您所说,Angular正在拦截此操作并调用仅更新浏览器链接的History.pushState。

为了使html5mode路由工作,你需要做的是实现url重写。 每个请求都必须redirect到引导AngularJS应用程序的索引文件,但这需要在服务器上完成。 Angular会自己渲染所需的页面。

检查出连接mod重写咕噜的任务。

你也可以直接使用这个中间件 。