2016-11-09 54 views
0

私はリンク先ページ( '/')を持っています。このページには、送信ボタン付きのユーザー名とパスワードのログインフォームがあります。私はフォームのパラメータを受け取るためにページとapp.postを読み込むapp.getを持っています。しかし、私の意図は、app.post( '/ login'、function(req、res){// logic})です。/loginルートやページがロードされていないので、これは単にログイン自体のロジック(ユーザー名の確認など)を格納するだけです。 '/'からポストを取得してポストにリダイレクトする簡単な方法はありますか?存在しない/ loginページをロードしようとせずにログインしますか?Express JSルートを使用してPOSTをPOSTにリダイレクト

+0

ポリシーの違反があった場合、または私の質問が何らかの理由で受け入れられない場合は、単純に投票しないでください。 –

+0

私の答えはあなたのために働いたのですか?もしそうなら、[回答を受け入れる](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)を検討して、その問題を探している他の人たちあなたの質問には受け入れられた答えがあることがわかります。 – rsp

答えて

2

私はあなたの質問を正しく理解しているかわかりません。あなたが理解しているように、/へのあなたのPOST要求が、/loginへのPOST要求にリダイレクトされることが厄介なことがあります。

通常、301 Moved Permanentlyまたは302 Found HTTPステータスコードを送信してリダイレクトします。両方とも通常、実際には303の「その他」を参照し、GET要求が行われたかのように機能します。

これは標準と矛盾する業界の実例です。 HTTP/1.0仕様(RFC 1945)ではクライアントが 一時リダイレクト(オリジナルの記述フレーズは "Moved Temporarily"でした)を実行する必要がありましたが、一般的なブラウザでは30235の 機能を実装した302が実装されました。したがって、HTTP/1.1は、2つの動作を区別するために、ステータス コード303と307を追加しました。 (HTTP/1.1以降)変更することはできません。この問題に対処するために作成さ はしかし、それは303

であるかのように、いくつかのWebアプリケーションやフレームワークは、302のステータスコード を使用する307一時的なリダイレクトがありますHTTPメソッド - POSTからのリダイレクトは依然としてPOSTでなければなりません - Wikipedia:

この場合、リクエストは別のURIで繰り返す必要があります。 しかし、今後のリクエストでも元のURIを使用する必要があります。 302が歴史的にどのように実装されたかとは対照的に、 では、元の要求を再発行するときに、要求メソッド を変更することはできません。 の例では、別のPOST 要求を使用してPOST要求を繰り返す必要があります。

私が知る限り、ブラウザは、このようなリダイレクトに従う前にユーザーに警告する必要があります。私はそれが実際にどのように機能するのか分かりません。私はそれがユーザーに迷惑をかけることがあり、まったく働かないこともあるので、それに頼ることはありません。

function loginHandler(req, res) { 
    // logic 
} 
app.post('/login', loginHandler); 
app.post('/', loginHandler); 

またはこのようなもの、使用して正規表現:

app.post(/^\/(?:login)?$/, function (req, res) { 
    // logic 
}); 

その方法の代わりに、これに

app.post('/login', function (req, res) { 
    // logic 
}); 

私の提案は、これを変更するかだろう同じハンドラが両方のルートにリダイレクトされます。それはあなたが望むようにリダイレクトに依存しないように、リダイレクトはまったくないので、より高速で強力です。

関連する問題