Javascript 使用/和/:slug作为不同的路由文件表示动态路由
因此,我正在重构我的node/express应用程序,并试图分离我的根。这是我的问题: 我想要一个主页,然后是一个完全不同的网页扩展,这不属于其他路线 例如,假设我有3个页面:主页、关于,然后是一个用户页面,其中URL是“mysite.com/username123” 现在我知道(或至少相信)这可以通过以下方式实现:Javascript 使用/和/:slug作为不同的路由文件表示动态路由,javascript,node.js,express,url-routing,Javascript,Node.js,Express,Url Routing,因此,我正在重构我的node/express应用程序,并试图分离我的根。这是我的问题: 我想要一个主页,然后是一个完全不同的网页扩展,这不属于其他路线 例如,假设我有3个页面:主页、关于,然后是一个用户页面,其中URL是“mysite.com/username123” 现在我知道(或至少相信)这可以通过以下方式实现: var express = require('express'); var router = express.Router(); router.get('/:slug', func
var express = require('express');
var router = express.Router();
router.get('/:slug', function(req, res, next) {
if(req.params.slug) {
var data = {
my: 'data'
};
res.render('index', data);
} else {
var userdata = {
my: 'data'
};
res.render('user', userdata);
}
});
module.exports = router;
var routes = require('./routes/index');
var users = require('./routes/users');
var about = require('./routes/about');
app.use('/', index);
app.use('/', users);
app.use('/about', about);
但这不是我想做的;我想把它们保存在两个不同的路由文件中。因此,我的app.js文件将包含以下内容:
var express = require('express');
var router = express.Router();
router.get('/:slug', function(req, res, next) {
if(req.params.slug) {
var data = {
my: 'data'
};
res.render('index', data);
} else {
var userdata = {
my: 'data'
};
res.render('user', userdata);
}
});
module.exports = router;
var routes = require('./routes/index');
var users = require('./routes/users');
var about = require('./routes/about');
app.use('/', index);
app.use('/', users);
app.use('/about', about);
其中,/users
在有slug时渲染。这实际上是一种工作。如果没有:slug
,则加载索引文件,否则加载用户文件(路由文件中有:slug,此处未显示)。但是/about
会被覆盖
现在我想我可以把/about
推到列表的顶部,这样做会起作用,但这似乎非常草率,这样做的全部目的是正确地构造我的代码
这种情况应该如何妥善处理?有人能在这里给我一些帮助吗?这是因为
/about
被/:slug
覆盖了。换句话说,express无法判断about
是否不是一个slug
解决办法可能是:
router.get('/users/:slug')
router.get(':slug', function (req, res, next) {
if (req.params.slug === 'about') {
return next();
}
// get user data and render
res.render('user', userdata);
});
将
/about
路线附在此下方。只需按此顺序重新安排路线即可
app.use('/about', about);
app.use('/', users);
静态路由将优先于动态路由。发生这种情况是因为
/about
被/:slug
覆盖。换句话说,express无法判断about
是否不应该成为一个slack。我明白为什么会这样。我只需要知道我应该如何解决这个问题,同时将/:slug
保存在一个单独的文件中,而不是在/
的主页中。您需要向用户的路由添加一些内容。例如:router.get(“/users/:id”
`但是我没有/users/页面,我也不想要一个。我希望用户名出现在域的后面。Ian在这种情况下,你可以使用/:folder
并通过签入req.params.folder
和if/else
条件进行路由。这不是我所希望的优雅解决方案,但这就是问题所在我现在就同意。如果没有人能在未来24小时内提出一个更干净的解决方案(如果有的话),我会投票将其作为解决方案。谢谢,非常感谢。这是我能想到的最好的解决方案。如果你发现一个更优雅的解决方案,请发帖