私はnodejs/expressjsにショッピングカートアプリケーションを構築しています。ユーザーがサインインした後、正しいページにリダイレクトする際に問題が発生しています。私は密接に関係するいくつかの記事を見つけましたが、それらの記事から修正しようとする私の試みはすべてこのトリックを行っていません。NodeJS/ExpressJSで正しくリダイレクトする方法は?
access: function(req, res){
var data = JSON.parse(req.body.data);
console.log(data);
Customers.findOne({"custEmail": data.custEmail}, function(err, user){
if(err){
console.log(err);
res.send("error");
}if(!user){
console.log("user not found");
res.send("error");
}else{
console.log("user found");
bcrypt.compare(data.custPassword, user.custPassword, function(err, reponse){
if(reponse){
req.session.regenerate(function(err){
if(err){
console.log(err);
res.send("error");
}else{
req.session.success = true;
res.send("Success");
//res.redirect('/');
}
});
}else{
console.log("error");
}
});
}
});
ユーザーはログイン情報を入力してログインボタンをクリックします。 Ajaxリクエストは、このアクセス関数にデータを送信します。この関数は、ユーザーがデータベースに存在するかどうかを調べることから始まります。それがbcryptパスワードを比較し続けている場合、それらが等しい場合には正常にログインし、そうでない場合は明らかにエラーになります。
問題はここにあるように思わ:}else{ req.session.success = true; res.send("Success"); //res.redirect('/'); }
ユーザーのメールアドレスとパスワードが一致し、これは右ここにヒットした場合。このセッションをtrueに設定すると、ユーザーはこのセッションが必要なページにアクセスし、ajaxリクエストにSuccessメッセージを返します。これは現在完全にうまく動作し、res.sendはフロントエンドに送られます。 res.redirectのコメントを外すと、「設定された後にヘッダーを設定できません」という予期した結果が発生します。ですからres.sendをコメントアウトするとres.redirectはまったく動作しなくなります。エラーはありません。
ここでこのリダイレクトが機能しないのはなぜですか?ヘッダーはこの関数のどこにも設定されておらず、リダイレクトは完全に正常に動作するはずです。どんな助けでも大歓迎です。ありがとう。
ありがとうございます。あなたの最初の最初のresposneは私のために十分でした。私は100%必要ではなかったので、Ajaxリクエストを削除するだけでした。私はAjaxの作品が好きなので、ここでそれを使うと思った。代わりに、私はAjaxを取り出し、フォームの提出時にページからreq.body.dataを取得しました。それから、そこに正しいリダイレクトを置くだけで簡単でした。あなたのタイムリーかつ非常に有益な答えを感謝してください! – Zgbrell
あなたの応答から何かを変更または削除したくないのですが、このステートメントを大胆にしたい場合:リダイレクトは、ajax呼び出しでは処理されないため、通常はリダイレクトは適用されません(ブラウザはページ上のリダイレクトを処理します負荷またはフォームのポストレスポンス)。あなたの応答でそれは優れています。この文章だけで、この特定のケースでAjaxを使用しないことに決めました。 – Zgbrell
あなたもこの投稿を見てみませんか? [リンク](http://stackoverflow.com/questions/41089118/how-to-make-a-successful-ajax-request-using-javascript-on-page-load) – Zgbrell