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它,但是我认为这个想法应该是清楚的。