我有一个带有令牌的下载链接的网址,如下所示
http://localhost:3000/download/g5ulh69jh8aclhqi
在我的config.js中,我将angular url route provider定义如下
$urlRouteProvider
.when('/upload/', '/upload')
.when('/download', '/download')
.when('/download/', '/download')
.when('/download/:token', '/download/:token')
.otherwise(function () {
var defaultUrl = '/dashboard';
return defaultUrl;
});
$stateProvider
.state('extdownload', {
url: '/download/',
abstract: true,
data: {
breadcrumbLabel: 'Download url base'
}
})
.state('extdownload.token', {
url: '/{token:[a-zA-Z0-9]+}',
templateUrl: '/views/download/download.jade',
views: {
'@': {
controller: 'DownloadController',
templateUrl: '/views/download/download.jade'
}
},
data: {
breadcrumbLabel: 'Download page'
}
})
但是每当我转到url时,url路由提供程序始终默认为otherwise子句并转到/ dashboard url。网址如下所示
http://localhost:3000/download/g5ulh69jh8aclhqi#!/dashboard
在我的routes.js中,我按如下方式渲染玉文件
app.get('/download/:token', can_access.if_not_logged_in(), function(req, res) {
res.render('download/download', {
token: req.params.token
});
});
我被困在为什么它没有正确检测url提供程序中的url。是因为我正在渲染玉文件吗?对于其他页面,它似乎工作得很好
更新1:
我认为这可能会有所帮助,但我注意到在else子句中$ location.path()是一个空字符串。也许这就是为什么网址不匹配?
{"$$protocol":"http","$$host":"localhost","$$port":3000,"$$path":"","$$search":{},"$$hash":"","$$url":"","$$absUrl":"http://localhost:3000/download/g5ulh69jh8aclhqi","$$replace":false}
更新2:
我添加了$ locationProvider.html5Mode(true);现在检测到URL。但是,stateProvider仍然没有检测到状态。我用$ state检查了我的downloadController。它不会在页面中获取面包屑数据。
另一个问题是,即使正确检测到网址,我也不会看到下面显示的网址,因为我期待它
http://localhost:3000#!/download/g5ulh69jh8aclhqi