2

我尝试使用 expressjs 检测 IE,代码肯定会将我重定向到错误页面。

但问题是它不会渲染 css 文件并在我的文件夹中获取图像文件。

我认为问题在于 expressjserror_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);
})
4

1 回答 1

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(),即使您在其他中间件之后声明该路由(有趣的事实:在任何时候您声明一个路由 - 使用app.{get,post,all,...}-app.router中间件会自动插入到中间件链中)。

如果可能,最简单的解决方案是将静态和 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('/', ...);
...

另一种解决方案是通过查看过滤掉ieRedirecter中间件中对静态资源的请求req.path,但这假设您可以轻松识别这些请求(例如它们是否以/cssor开头/js)。

于 2013-05-22T07:15:42.520 回答