我试图通过使用expressjs来检测IE,代码肯定会将我重定向到错误页面。
但问题是它不会渲染css文件并在我的文件夹中获取图像文件。
我认为问题是在设置静态路径之前,expressjs会重定向到error_page
。
所以我把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);
})
答案 0 :(得分:2)
此订单不起作用:
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()
,即使您在其他中间件之后声明该路由(有趣的事实:在任何时候您声明路由 - 使用{{ 1}} - app.{get,post,all,...}
中间件自动插入中间件链中。
如果可能,最简单的解决方案是将静态和IE中间件移到路由之前(但我意识到这可能会导致应用程序设置出现问题):
app.router
另一种解决方案是通过查看// 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('/', ...);
...
过滤掉ieRedirecter
中间件中静态资源的请求,但这假设您可以轻松识别这些请求(例如,如果它们以{{1}开头}或req.path
)。