我希望AngularJs能够处理我的大多数路线,因此我不需要同时在Express和Angular中指定路线。所以我创造了一个"赶上所有"像这样的路线:
app.use('/api', api); // server-side stuff
app.use(express.static(__dirname + '/public')); //static files
app.get('*', function (req, res) { //angular stuff
res.render('index');
});
然后在我的Angular应用程序上,如果路线不存在,我会这样处理
$routeProvider.otherwise({
templateUrl: '/partials/404.html',
controller: 'DummyCtrl'
});
问题在于,如果static()
路由与公共目录中的文件不匹配,则会转到下一个" catch all"路线。
这导致一些问题,因为服务器返回res.render('index');
(整个页面),然后由AngularJs在页面中注入,因此我收到警告WARNING: Tried to load angular more than once.
。
我想重写我的#34;赶上所有"路线只匹配路线,如果他们不匹配文件。
我相信我需要的是Angular路线的正则表达式,如果它们看起来像文件,它们将排除路线。例如:排除" .html," " .png"等
答案 0 :(得分:1)
以下是解决方案:/\/[^.]*$|^(?:https?:)?\/\/[^\/]+$/