2012-06-02 2 views
2

Im пытается использовать имя пользователя в качестве маршрута в 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 и т. Д. Это недостаточный способ сделать это, потому что theres - вызов db каждый раз, когда он проходит через маршрут /:username. Мой вопрос: есть ли более эффективный способ?

ответ

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 маршрут и вызвать удар базы данных.

+0

Sweet! Спасибо – georgesamper

+0

Возможно ли сделать что-то вроде app.get ('/: имя пользователя, функция (req, res, next) {...}); и app.get ('/: username/somethingmore', function (req, res, next) {...}); – Adam

Смежные вопросы