1

Express 3.4.x で最新の状態にする古い Express 2.5.9 アプリがあります。本番環境では、アプリは RewriteRule を使用して Apache によってプロキシされます。

RewriteRule ^/path/to/app/(.*)$ http://nodeserver.domain.com:3000/$1 [P,L]
RewriteRule ^/path/to/app$ /path/to/app/ [R,L]

そのため、実稼働環境でhttp://domain.com/path/to/app/fooは は にプロキシされhttp://nodeserver.domain.com:3000/foo、Express は通常どおり /foo ルートを処理します。

Express 2.x では、このbasepath設定を使用して、本番環境でリダイレクトが適切に処理されるようにしました (たとえば、にリダイレクトする必要がある場合/loginbasepath設定を に設定する/path/to/appと、実際には にリダイレクトされ/path/to/app/loginます。basepath開発では設定されませんでした (たとえば、でアプリにアクセスするhttp://localhost:3000)。

basepathは Express 3 で削除されたため、設定が機能しなくなり、リダイレクトも機能しなくなりました (たとえば、 に移動した場合http://domain.com/path/to/app/admin、そのルートには にリダイレクトされるミドルウェアがあり、最終的に/loginにリダイレクトされhttp://domain.com/loginます)。

からリダイレクトを書き直すことができました

res.redirect('/login')

var redirectUrl = config.basepath ? config.basepath + '/login' : '/login'
res.redirect(redirectUrl)

しかし、それはエレガントではないようです。

取り付け方法を検討しましたが、このシナリオでは少しやり過ぎのようです。

4

1 に答える 1

1

Express API docによると、おそらくただ回す必要があります

res.redirect('/login')

res.redirect('login')

バージョン3以降、それが正しい方法であるように思われるため、マウントアプローチを実行します。

于 2014-02-22T12:12:51.707 に答える