本质上,当我使用包罗万象的路由并且res.redirect('/')
无论输入什么URL都使用它时,它将始终呈现索引/主页(即,Angular似乎无法“看到”完整的URL),但是如果我放置res.render('index')
在包罗万象的路由中一切正常。我不希望重复代码并重定向到'/'应该起作用,我可能在这里某处犯了一个愚蠢的错误,我们将不胜感激!
角路由:
app.config(function ($routeProvider, $locationProvider) {
$locationProvider.html5Mode(true);
$routeProvider
.when('/',
{
templateUrl: 'partials/home.jade'
})
.when('/about',
{
templateUrl: 'partials/about.jade'
})
.otherwise( {redirectTo: '/'});
});
输入site-address/about
以下内容将正确呈现关于页面:
app.get('/', function (req, res) {
res.render('index');
});
app.get('/partials/:name', function (req, res) {
res.render('partials/' + req.params.name);
});
app.get('*', function (req, res) {
res.render('index');
});
这将始终只显示索引页面:
app.get('/', function (req, res) {
res.render('index');
});
app.get('/partials/:name', function (req, res) {
res.render('partials/' + req.params.name);
});
app.get('*', function (req, res) {
res.redirect('/');
});
配置是否有帮助:
// Configuration
app.configure(function () {
app.set('port', process.env.PORT || 1337);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.static(path.join(__dirname, 'public')));
app.use(app.router);
});
这是设计使然。
当您使用时res.redirect('/')
,Node / Express发送HTTP重定向,这将更改浏览器中的URL,因此,在呈现索引模板以及运行角度代码时/
,无论用户输入了什么,URL均为,整个重定向点)。
当您省略重定向并仅发送模板作为响应时,NodeJ会以HTTP 200(成功)以及HTML内容进行响应。由于URL不变,因此当您的应用程序运行时,角度路由会正确路由。
编辑添加:地址注释
与其让两条路由呈现相同的模板,不如将/
所有的路由都放在一起,而让包罗万象的呈现索引模板,然后将控制权移交给Angular路由器。
否则,我会考虑从概念上划分路由:将所有应用程序路由专门发送到有角路由器,并通过nodejs渲染静态路由,并使用catch all命令为缺少或未知的资源渲染更合适的页面(对于您的用户)。
您可以使用类似正则表达式的语言来指定单个处理程序:
app.get('/()|(about)|(contact)/',function(req,res) {/* handle */});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句