是指内容的概念性组织。在考虑路由之前有一个可扩展(但不过于复杂的)IA会为后续工作提供巨大的好处。
有些建议能帮你实现持久的IA。
如果想让网站是可发现的,那就要考虑SEO,以及URL会如何影响它。特别是如果某些关键字特别重要并且有意义,就考虑把它变成URL的一部分。
另外,不要为了提高排名而往URL中塞关键字,这和良好的IA背道而驰,并且很可能会事与愿违。
用子域名分割内容时一般会影响SEO,所以一般应该留给SEO不重要的区域,比如管理区域和API; 并且只有在确实没有其他选择时,才给对于SEO方案来说比较重要的内容使用子域名。
app.get(/about)
会处理对 http://meadowlarktravel.com/about
、http://www.meadowlarktravel.com/about
和http://admin.meadowlarktravel.com/about
的请求。先安装这个包(npm install --save vhost
),然后编辑应用程序文件创建一个子域名:
// 创建子域名 "admin" ……它应该出现在所有其他路由之前
var admin = express.Router();
app.use(vhost('admin.*', admin));
// 创建admin的路由;它们可以在任何地方定义
admin.get('/', function(req, res){
res.render('admin/home');
});
admin.get('/users', function(req, res){
res.render('admin/users');
});
express.Router()
本质上是创建了一个新的Express路由器实例。//这个例子中两次概率相同
app.get('/foo', function(req,res,next){ //注意next
if(Math.random() < 0.5) return next();
res.send('sometimes this');
});
app.get('/foo', function(req,res){
res.send('and sometimes that');
});
specials
注入到res.locals
属性中function specials(req, res, next){
res.locals.specials = getSpecialsFromDatabase();
next();
}
app.get('/page-with-specials', specials, function(req,res){
res.render('page-with-specials');
});
req.session.authorized
,则可以像下面这样做一个可重复使用的授权过滤器:function authorize(req, res, next){
if(req.session.authorized) return next();
res.render('not-authorized');
}
app.get('/secret', authorize, function(){
res.render('secret');
})
app.get('/sub-rosa', authorize, function(){
res.render('sub-rosa');
});
+
、?
、*
、(
和)
。//同一个路由处理/user和/username两个URL:
app.get('/user(name)?', function(req,res){
res.render('user');
});
//省略缩写
app.get('/khaa+n', function(req,res){
res.render('khaaan');
});
//多个选择
app.get('/crazy|lunacy/', function(req,res){
res.render('check');
});
var staff = {
mitch: { bio: 'Mitch is the man to have at your back in a bar fight.' },
madeline: { bio: 'Madeline is our Oregon expert.' },
walt: { bio: 'Walt is our Oregon Coast expert.' },
};
app.get('/staff/:name', function(req, res){
var info = staff[req.params.name];
if(!info) return next(); // 最终将会落入 404
res.render('staffer', info);
})
//
var staff = {
portland: {
mitch: { bio: 'Mitch is the man to have at your back.' },
madeline: { bio: 'Madeline is our Oregon expert.' },
},
bend: {
walt: { bio: 'Walt is our Oregon Coast expert.' },
},
};
app.get('/staff/:city/:name', function(req, res){
var info = staff[req.params.city][req.params.name];
if(!info) return next(); // 最终将会落入404
res.render('staffer', info);
});