2

Expressjs を使用して IE を検出しようとしましたが、コードは確実にエラー ページにリダイレクトします。

しかし、問題は、css ファイルをレンダリングせず、フォルダーに画像ファイルを取得しないことです。

error_page問題は、静的パスが設定される前にexpressjsがリダイレクトされることだと思います。

だから私は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('/', ...);
...

もう 1 つの解決策は、ieRedirecterミドルウェア内の静的リソースのリクエストを を見てフィルターで除外することですが、それはそれらのリクエストを簡単に識別できることを前提としています (またはreq.pathで始まる場合など)。/css/js

于 2013-05-22T07:15:42.520 に答える