2012-06-02 116 views
2

我試圖在expressjs中使用用戶名作爲路由,查看他們的個人資料。帶用戶名的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路由時調用數據庫。我的問題是,有沒有更好的方法?

回答

7

嘗試在應用程序中的/:username路線之前定義更具體的路線(例如/start/forum)。 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路線,導致數據庫命中。

+0

甜!謝謝 – georgesamper

+0

是否有可能做類似app.get('/:username,function(req,res,next){...});和app.get('/:username/somethingmore',function(req,res,next){...}); – Adam