我在服务器上使用NodeJS+expressJS,在客户端上使用AngularJS
AngularJS控制器有以下路线:
app.config(function($routeProvider,$locationProvider) {
$routeProvider
.when('/field1/:id', {
controller: 'ctrl1',
templateUrl: "/view/mainpages/field1.html"
})
.when('/field2/:id', {
controller: 'ctrl2',
templateUrl: "/view/mainpages/field2.html"
})
........... many many
.when('/', {
controller: 'ctrl0',
templateUrl: "/view/mainpages/index.html"
})
.otherwise({redirectTo : '/'});
NodeJS静态:
app.all('/*', express.static(__dirname + '/client'));
在调用直接通过该链接的情况下,如何使服务器重定向其路径上相对于根的所有静态页面。
示例:server:3000/field1/23
必须调用server:3000/client/index.html
索引必须像server:3000/js/cntr1.js
一样上传JS
乌普德:我找到了解决问题的办法。但它看起来像一个拐杖
app.get('/field1/([0-9]+$)', function(req, res, next) {
req.url='/index.html';
next();
});
app.use('/field1', express.static(__dirname + '/client'));
也许还有一个更优雅的解决方案?
在expressjs中,您可以使用正则表达式模式匹配来定义路由。这意味着,特定集合下的任何内容都将始终从服务器端返回相同的页面,您将让angular决定到底显示什么或执行哪个操作。
将所有内容重定向到同一页面并不是一个好主意,因为您需要管理您的资产,它们也存在于/部分,相反,使用易于管理的子目录是一个好想法
以下片段将把应用程序路径下的所有内容重定向到服务器端上的同一页面
app.get('/app/*', function(req, res) {
res.send('app_index');
})
如果你不想局限于一个应用程序目录,相反,你有许多不同的根级别目录,所有这些目录都需要指向同一个页面,你可以做这样的
app.get('/(app|server|client|form|dashboard)/*', function(req, res) {
res.send('app_index');
})