[解決済み] ExpressJS : res.redirect()が期待通りに動作しない?
質問
2日前からこの問題で悩んでいます。ググったり、stackoverflowで調べたりしたのですが、解決できません。
私は、ホームページへリダイレクトするログインページのあるシンプルなnodeアプリ(+Express + Mongoose)を作っています。これが私のサーバーJSコードです。
app
.get('/', (req, res) => {
console.log("Here we are : root");
return res.sendfile(__dirname + '/index.html');
})
.get('/login', (req, res) => {
console.log("Here we are : '/login'");
return res.sendfile(__dirname + '/login.html');
})
.post('/credentials', (req, res) => {
console.log("Here we are : '/credentials'");
// Some Mongoose / DB validations
return res.redirect('/');
});
ログインページがPOSTリクエストを
/credentials
投稿されたデータは検証されます。これは動作します。ここで、"Here we are .を見ることができます。'/credentials'" がNodeコンソールに表示されます。
次に問題なのは、res.redirectが正しく動作しないことです。私はそれが'/'ルートに到達することを知っています、なぜなら。
- Node コンソールで "Here we are : root" を見ることができます。
- index.htmlのページがレスポンスとしてブラウザに送り返されていますが、ウィンドウに表示されていません。 Chrome のインスペクタには POST リクエストのレスポンスが表示され、インスペクタでブラウザに送信される HTML コードを確認できますが、URL は /login のままで、ログインページが画面上に表示されたままになっています。
(編集) リダイレクトはMongooseのコールバック関数にあり、(NodeJSがそうであるべきように)同期的ではありません。わかりやすくするために、Mongooseのバリデーションに関するものを削除したところです。
を追加してみました。
res.end()
しかし、うまくいきません。
私が試したのは
req.method = 'get';
res.redirect('/');
そして
res.writeHead(302, {location: '/'});
res.end();
動作しない
何が間違っているのでしょうか?どうすれば実際に '/login' ページを離れ、ブラウザを '/' にリダイレクトし、受け取った HTML コードを表示できますか?
事前に100万人の助けをありがとうございました :)
解決方法は?
問題は、バックエンドではなく、フロントエンドにあるのかもしれません。POSTリクエストを送信するためにAJAXを使用している場合、それは特にあなたのURLを変更しないように設計されています。
使用方法
window.location.href
は、AJAX のリクエストが完了した後 (
.done()
) を使って URL を希望のパスに更新するか、JQuery を使ってください。
$('body').replaceWith(data)
リクエストから戻ってきたHTMLを受け取るとき。
関連
-
[解決済み】AWS STS AssumeRoleへのアクセスを可能にする方法
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】エラー TRK0005: 位置特定に失敗しました。"CL.exe"
-
[解決済み】MongooseでEnumを作成し使用する方法
-
[解決済み】「npm install」と「npm rebuild」の違いとは?
-
[解決済み] create-react-app、インストールエラー("コマンドが見つからない")。
-
[解決済み] EventEmitter のメモリリークの可能性が検出された
-
[解決済み] ブラウザで動作しているURLで「connect ETIMEDOUT」エラーが発生する原因は何ですか?
-
[解決済み] Mongoose Schema がモデルとして登録されていません。
-
[解決済み] ExpressJS アプリケーションをどのように構成するか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] リソースの読み込みに失敗しました: net::ERR_CONNECTION_REFUSED : Nodejs
-
[解決済み] (node:63208) DeprecationWarning: collection.ensureIndex は非推奨です。代わりにcreateIndexesを使用してください [重複]。
-
[解決済み】 console.logの出力をどこに永久保存するか?
-
[解決済み】ExpressJSとMeteorJSの比較【終了しました
-
[解決済み] 非推奨パッケージに関するNPM警告メッセージ
-
[解決済み】モジュール '@babel/core' が見つかりません。
-
[解決済み】ブロックスコープの宣言は、ストリクトモード以外ではまだサポートされていません。
-
[解決済み】Passport.js - エラー: ユーザーのセッションへのシリアライズに失敗しました。
-
[解決済み】NPMインストールエラー:解析中の予期せぬJSON入力の終了 '...nt-webpack-plugin": "0'' 付近。
-
webpack ENOENTソリューションの起動