快速路由-使url params.id服务于静态和动态内容的最佳方式



假设我有一个类似的url

www.foo.com/abc
www.foo.com/huyr
... etc

在这个例子中,"abc"one_answers"huyr"是id,我会从数据库中获取信息,其中密钥是id。

但假设我也希望静态链接(将提供静态页面)遵循相同的url格式:

www.foo.com/about
www.foo.com/contact

最好的方法是什么?

现在我有这样的想法

exports.view = function(req, res) {
var id = req.params.id
switch (id) {
case 'about':
// load 'about' controller
break
case 'contact':
// load 'contact' controller
break
default:
// proceed with this function
}
}

这是最好的方法吗?有没有更有效/更有组织的方法来做到这一点?

在我看来,最好的方法是像处理任何其他页面一样,为这些页面提供服务,无论是否为静态页面。使用右侧页面响应GET请求。

// will respond to http://www.site.com/about
app.get('/about', function( req, res, next ) {
res.render('about.ejs'  // etc
});
// will respond to http://www.site.com/contact
app.get('/contact', function (req, res, next) {
res.render('contact.ejs' // etc
});
// will respond to any first subdir (iirc) http://www.site.com/(?)
app.get('/:id', function ( req, res, next ) {
var id = req.param['id'];
// db query, etc
});

你的静态页面当然可以在一条路线上让它更干净。你只需要确保在id路由之前响应那些静态路由,否则你将使用你想要响应id的路由来响应about/contact url。这里的秩序很重要。

最新更新