2

我试图在 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是一个从数据库中获取用户的函数。如果它没有找到用户,它会继续下一条路线。我还有很多其他页面,例如/start/forum等等。这是一种不充分的方法吗,因为每次通过/:username路由时都会调用 db。我的问题是,有没有更好更充分的方法?

4

1 回答 1

7

尝试在应用程序中的路由之前定义更具体的路由(例如/start, /forum) 。/:usernameExpress 按照您定义的顺序匹配路由。

例如这样做:

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路由并导致数据库命中。

于 2012-06-02T03:00:49.797 回答