Express.js — фильтровать идентификатор mongodb в URL-адресе

Этот вопрос вдохновлен этим сообщением но в моем случае мне нужно фильтровать MongoId. Можно ли легко сделать фильтрацию, как показано ниже, потому что мне нужно использовать ее на каждом маршруте?

app.post('/:mongoId(^[0-9a-fA-F]{24}$)', function(req, res){
   // Send query based on mongoId
}

person Erik    schedule 04.10.2013    source источник


Ответы (2)


Почти готово, просто не добавляйте якоря ^ и $. И диапазон A-F в верхнем регистре даже не нужен, поскольку Express, кажется, соответствует регистру без учета регистра:

app.post('/:mongoId([0-9a-f]{24})', function(req, res){
  var id = req.param('mongoId');
  ...
});
person robertklep    schedule 04.10.2013

Согласно документации Express API, да, вы можете использовать регулярное выражение в качестве пути:

Также можно использовать регулярные выражения, и они могут быть полезны, если у вас есть очень специфические ограничения.

app.get(/^\/commits\/(\w+)(?:\.\.(\w+))?$/, function(req, res){
  var from = req.params[0];
  var to = req.params[1] || 'HEAD';
  res.send('commit range ' + from + '..' + to);
}); 
person Traveling Tech Guy    schedule 04.10.2013
comment
Спасибо за ответ, но как я могу построить регулярное выражение для проверки идентификатора mongodb? - person Erik; 04.10.2013
comment
На какое точное выражение вы пытаетесь ориентироваться? Вы всегда можете попробовать свои регулярные выражения, чтобы увидеть, отражают ли они то, что вам нужно, на regexpal.com. - person Traveling Tech Guy; 04.10.2013