2017-12-10 23 views
0

自分のアカウントにログインした後、自分のウェブサイトを使用しているユーザーをリダイレクトしようとしていると、彼はダッシュボードにリダイレクトされます。
ブラウザインスペクションツールの[ネットワーク]タブで/dashboardルートのリクエストが表示されることがありますが、ページはロードされません。
これまでのコードです。Express jsレンダリングしないリダイレクトページ

router.post('/login', function(request, response){ 
    // verify against database and send back response 
    var userData = {}; 
    userData.email = request.body.email; 
    userData.password = request.body.password; 
    userData.rememberPassword = request.body.rememberPassword; 

    // check if in the database and re-route 
    var query = database.query('SELECT * FROM users WHERE email = ?', [userData.email], function(error, result){ 
     if(error){ 
      console.log('Error ', error); 
     } 
     if(result.length){ 
      // check if the password is correct 
      if(userData.password === result[0].password){ 
       // redirect to the dashboard 
       // TODO this piece of code does not redirect correctly 
       response.redirect('/dashboard'); // < HERE 
       console.log('Haha'); 
      } 
     } 
     else{ 
      // do something when there is are no results 
      // invalid email status code 
      response.statusCode = 405; 
      response.send(''); 
     } 
    }); 
}); 

これはdashboard向かっ経路であり、ブラウザでアクセスするとき、それは適切にレンダリングされています。

router.get('/dashboard', function(request, response){ 
    response.render(path.resolve(__dirname, 'views', 'dashboard.pug')); 
}); 

ユーザーがログイン処理を完了したときにリダイレクトできないのはなぜですか?おかげさまで

答えて

0

この問題はフロントエンドに存在する可能性があり、バックエンドには存在しない可能性があります。 AJAXを使用してPOSTリクエストを送信している場合は、URLを変更しないように特別に設計されています。

AJAXのリクエストが完了したら、window.location.hrefを使用してURLを更新してください。最も簡単な方法は、アクションが/loginのフォームを作成し、投稿を使用してURL変更をトリガーすることです。

問題は、バックエンドと存在しないことを確認するために、

  1. は 制御が渡されたかどうかを確認するためにrouter.get('/dashboard'へのロギングステートメントを追加します。
  2. /loginルートのHTTPステータスコードが302で、リダイレクトを示し、ロケーションヘッダーにルート/ダッシュボードがあることを確認します。
  3. 応答/ダッシュボードのコンテンツタイプはtext/htmlです。res.setHeader("Content-Type", "text/html")を使用して設定してください。
関連する問題