Express路由器

我正在开发NodeJS上的内容预处理器我有3种具体的预处理方法:

  • build立HTML
  • build立xhtml
  • build设XML

每种方式都是相互不同的(不同的中间件)所以我初始化了3台路由器:

var xmlRouter = express.Router(); var xhtmlRouter = express.Router(); var htmlRouter = express.Router(); 

我所需要的是将每个请求发送到具体的路由器。 我不能使用app.use()挂载每个路由器,因为我的url上有剥离效果:

 // Binding app.use(/\/\S*\.fast\.xml(?=$)/, xmlRouter); app.use(/\/\S*\.xhtml(?=$)/, xhtmlRouter); app.use([/\/\S*\.html(?=$)/, /\/\S*\/(?=$)/], htmlRouter); 

我会放松我的url,我需要进一步了解。 没门

那么有没有解决办法?

我现在无法testing,但是因为它不适合评论,所以在答案部分写下。

恕我直言,它应该这样工作:

 var xmlRouter = express.Router(); app.use(function(req, res, next) { if( req.url.match(/\/\S*\.fast\.xml(?=$)/) ) { //if the url matches, pass the res, res, next to the xmlRouter xmlRouter.handle(req, res, next); //if handle does not work try: xmlRouter(req, res, next) } else { //otherwise pass it to the next registered route next(); } }); //do the same for the other routers 

也许这个样本中有一个错误,因为我无法testing它,但是我认为这个想法应该是清楚的。