在expressjs中检测IE,但无法获取静态文件

我试图通过使用expressjs来检测IE,代码肯定会redirect到错误页面。

但问题是,它不会呈现的CSS文件,并在我的文件夹中获取图像文件。

我认为问题是expressjsredirect到error_page之前设置静态path。

所以我把app.all('*', ieRedirecter); 之后

 app.use(express.static(path.join(__dirname, 'public'))); app.use(express.static(__dirname + '/uploads')); 

问题仍然存在…有人可以帮我,谢谢!

我的设置

 function ieRedirecter(req, res, next) { if(req.headers['user-agent'].indexOf("MSIE") >= 0) { var myNav = req.headers['user-agent']; var IEbrowser = parseInt(myNav.split('MSIE')[1]) if(IEbrowser < 9) { res.render('error/browser_error', {title : 'not supporting your browser'}) } else { next(); } } else { next(); } }; app.configure(function(){ app.set('port', process.env.PORT || 3000); ... ... ... app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); app.use(express.static(__dirname + '/uploads')); app.all('*', ieRedirecter); }) 

此订单不起作用:

 app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); app.use(express.static(__dirname + '/uploads')); app.all('*', ieRedirecter); 

app.router是处理所有路由请求的中间件,包括app.all() ,即使你在其他中间件之后声明了这个路由(有趣的事实是:在任何时候你声明了一个使用路由的app.{get,post,all,...}app.router中间件被自动插入到中间件链中)。

如果可能的话,最简单的解决scheme是将静态和IE中间件移到路由之前(但是我意识到这可能会导致应用程序设置出现问题):

 // static middleware first... app.use(express.static(path.join(__dirname, 'public'))); app.use(express.static(__dirname + '/uploads')) // ...followed by the IE check app.use(ieRedirecter); // ...followed by your routes app.get('/', ...); ... 

另一个解决scheme是通过查看req.path来过滤掉ieRedirecter中间件中静态资源的请求,但是假设您可以轻松识别这些请求(就像他们以/css/js开头一样)。