我试图在expressjs中使用用户名作为路线,以查看他们的个人资料。
app.get('/:username', function (req, res, next) {
users.get_user(req.params.username, function (err, results) {
if(results[0]) {
res.render('/profile', {
title: 'Profile',
userinfo: results[0]
});
} else {
next();
}
});
});
users.get_user
是一个从db获取用户的函数。如果找不到用户,则继续下一个路线。我还有很多其他页面,如/start
,/forum
等。这是不是这样做的不充分的方法,因为每次通过/:username
路由时都会调用db 。我的问题是,有更好的方法吗?
答案 0 :(得分:7)
尝试在应用中的/start
路线之前定义更具体的路线(例如/forum
,/:username
)。 Express按照您定义的顺序匹配路径。
E.g。这样做:
app.get('/start', function(req, res, next) {...});
app.get('/forum', function(req, res, next) {...});
app.get('/:username', function(req, res, next) {...});
不
app.get('/:username', function(req, res, next) {...});
app.get('/start', function(req, res, next) {...});
app.get('/forum', function(req, res, next) {...});
这样,如果用户转到/start
,它就不会点击/:username
路由并导致数据库命中。