从Express路由中排除具有文件扩展名的路由

时间:2016-05-27 02:22:37

标签: angularjs regex node.js express

我希望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"等

1 个答案:

答案 0 :(得分:1)

以下是解决方案:/\/[^.]*$|^(?:https?:)?\/\/[^\/]+$/